用户登录
用户注册

分享至

软件算法说明书 算法设计说明书

  • 作者: 双腿夹着一个神
  • 来源: 51数据库
  • 2020-04-15

MD5有哪些算法说明?

Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。

这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

Hash算法在信息安全方面的应用主要体现在以下的3个方面: 1) 文件校验 我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。

MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

它常被用在下面的2种情况下: 第一是文件传送后的校验,将得到的目标文件计算 md5 checksum,与源文件的md5 checksum 比对,由两者 md5 checksum 的一致性,可以从统计上保证2个文件的每一个码元也是完全相同的。

这可以检验文件传输过程中是否出现错误,更重要的是可以保证文件在传输过程中未被恶意篡改。

一个很典型的应用是ftp服务,用户可以用来保证多次断点续传,特别是从镜像站点下载的文件的正确性。

更出色的解决方法是所谓的代码签名,文件的提供者在提供文件的同时,提供对文件Hash值用自己的代码签名密钥进行数字签名的值,及自己的代码签名证书。

文件的接受者不仅能验证文件的完整性,还可以依据自己对证书签发者和证书拥有者的信任程度,决定是否接受该文件。

浏览器在下载运行插件和java小程序时,使用的就是这样的模式。

第二是用作保存二进制文件系统的数字指纹,以便检测文件系统是否未经允许的被修改。

不少系统管理/系统安全软件都提供这一文件系统完整性评估的功能,在系统初始安装完毕后,建立对文件系统的基础校验和数据库,因为散列校验和的长度很小,它们可以方便的被存放在容量很小的存储介质上。

此后,可以定期或根据需要,再次计算文件系统的校验和,一旦发现与原来保存的值有不匹配,说明该文件已经被非法修改,或者是被病毒感染,或者被木马程序替代。

TripWire就提供了一个此类应用的典型例子。

更完美的方法是使用"MAC"。

"MAC" 是一个与Hash密切相关的名词,即信息鉴权码(Message Authority Code)。

它是与密钥相关的Hash值,必须拥有该密钥才能检验该Hash值。

文件系统的数字指纹也许会被保存在不可信任的介质上,只对拥有该密钥者提供可鉴别性。

并且在文件的数字指纹有可能需要被修改的情况下,只有密钥的拥有者可以计算出新的散列值,而企图破坏文件完整性者却不能得逞。

2) 数字签名 Hash 算法也是现代密码体系中的一个重要组成部分。

由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。

在这种签名协议中,双方必须事先协商好双方都支持的Hash函数和签名算法。

签名方先对该数据文件进行计算其散列值,然后再对很短的散列值结果--如Md5是16个字节,SHA1是20字节,用非对称算法进行数字签名操作。

对方在验证签名时,也是先对该数据文件进行计算其散列值,然后再用非对称算法验证数字签名。

对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。

而且这样的协议还有其他的优点: 首先,数据文件本身可以同它的散列值分开保存,签名验证也可以脱离数据文件本身的存在而进行。

再者,有些情况下签名密钥可能与解密密钥是同一个,也就是说,如果对一个数据文件签名,与对其进行非对称的解密操作是相同的操作,这是相当危险的,恶意的破坏者可能将一个试图骗你将其解密的文件,充当一个要求你签名的文件发送给你。

因此,在对任何数据文件进行数字签名时,只有对其Hash值进行签名才是安全的。

3) 鉴权协议 如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

需要鉴权的一方,向将被鉴权的一方发送随机串("挑战"),被鉴权方将该随机串和自己的鉴权口令字一起进行 Hash 运算后,返还鉴权方,鉴权方将收到的Hash值与在己端用该随机串和对方的鉴权口令字进行 Hash 运算的结果相比较("认证"),如相同,则可在统计上认为对方拥有该口令字,即通过鉴权。

散列算法长期以来一直在计算机科学中大量应用,随着现代密码学的发展,单向散列函数已经成为信息安全领域中一个重要的结构模块,我们有理由深入研究其设计理论和应用方法。

软件需求说明书内容都包括哪些

规范化软件开发过程中的《需求说明书》的编写,使之成为整个开发工作的基础。

2 适用范围本规范适用于集团开发项目的(软件)《需求说明书》的编写。

3 编写内容提示1 引言3.1.1 背景说明说明被开发软件的名称,任务提出者,用户及实现该软件的计算机网络。

3.1.2 参考资料列出有关资料(名称,发表日期,出版单位,作者等)。

3.1.3 术语和缩写词列出本文件中用到的专门术语的定义,及术语缩写词。

3.2 软件总体概述3.2.1 目标软件开发的意图、应用目标、作用范围以及需说明背景材料。

3.2.2 系统模型图示说明该软件的所有功能及其相互关系和数据传递情况。

3.2.3 假设和约束说明影响软件开发、运行环境和系统能力(如预告出错类型的能力)的某些假设和约束。

3.3 详细需求详细描述此软件系统的功能需求和性能需求。

3.3.1 功能需求对系统中每一个功能,要详细描述(图示或文字)。

概述 叙述功能名称,目标和作用。

输入 输入该功能的信息。

处理 描述该功能做什么,如何对输入信息进行加工并转换成输出信息。

输出 列出内部生成的文件。

3.3.2 性能需求定量地描述此软件系统应满足的具体性能需求。

可考虑以下方面:3.3.2.1精度说明系统的精度要求,如:数据的精度要求。

数字计算的精度要求。

数据传送的误码率要求。

3.3.2.2 时间特性说明系统的时间特性要求,如:解题时间。

询问和更新数据文件的响应时间。

系统各项功能的顺序关系。

3.3.2.3 灵活性说明当需求发生某些变化时系统的适应能力,指出为适应这些变化而需要设计的软件成分和过程。

3.3.2.4系统容量包括系统的设计容量和理论(计算)容量。

3.3.3 输入和输出解释各输入输出数据类型,并逐项说明某媒体、格式、数值范围等。

对软件的数据输出及必须标明的控制输出量进行解释并举例,包括对硬拷贝报告(正常结果输出、状态输出及异常输出)以及图形或显示报告的描述。

3.3.4 数据管理能力说明需要管理的文卷和记录的个数、表和文卷的大小规模,要按可预见的增长对数据及其分量的存储要求作估算。

3.3.5 故障处理列出可能的软件、硬件故障以及对各项性能而言所产生的后果和对故障处理的要求。

3.4 环境描述所开发软件运行所需的环境。

3.4.1 设备环境描述运行软件系统所需的设备能力,如:处理器的型号和内存容量。

存储媒体的数量。

通信网络(包括说明网络结构,线路速度及通讯协议等)。

3.4.2 支持软件环境列出与待开发的软件互相配合的支持软件(包括名称,版本号和文件资料),必要时还应列出测试软件,还要指出该软件用的编程语言,编译程序,操作系统和数据管理系统。

3.4.3 接口说明本软件与其他软件之间的接口、数据通信协议等。

3.4.4其他说明本软件系统在安全和保密方面的要求以及用户对使用方便、可维护性、可补充性、易读性、可靠性、运行环境可转换性的特殊要求。

软件自动化测试工具介绍有哪些呢?

又称共轭斜量法,是解线性代数方程组和非线性方程组的一种数值方法,例如对线性代数方程组 Ax=?, (1)式中A为n阶矩阵,x和?为n维列向量,当A对称正定时,可以证明求(1)的解X*和求二次泛函的极小值问题是等价的。

此处(x,у)表示向量x和у的内积。

由此,给定了初始向量x(0),按某一方向去求(2)式取极小值的点x(1),就得到下一个迭代值x(2),再由x(2)出发,求x(3)等等,这样来逼近x*。

若取求极小值的方向为F在 x(k=1,2,…)处的负梯度方向就是所谓最速下降法,然而理论和实际计算表明这个方法的收敛速度较慢,共轭梯度法则是在 x(k-1)处的梯度方向r(k-1)和这一步的修正方向p(k-1)所构成的二维平面内,寻找使F减小最快的方向作为下一步的修正方向p(k),即求极小值的方向p(其第一步仍取负梯度方向)。

计算公式为再逐次计算(k=1,2,…)。

可以证明当i≠j时,从而平p(1),p(2)形成一共轭向量组;r(0),r(1),…形成一正交向量组。

后者说明若没有舍入误差的话,至多 n次迭代就可得到(1)的精确解。

然而在实际计算中,一般都有舍入误差,所以r(0),r(1),…并不真正互相正交,而尣(0)尣(1),…等也只是逐步逼近(1)的真解,故一般将共轭梯度法作为迭代法来使用。

近来在解方程组(1)时,常将共轭梯度法同其他一些迭代法结合作用。

特别是对病态方程组这种方法往往能收到比较显著的效果。

其方法是选取一对称正定矩阵B并进行三角分解,得B=LLT。

将方程组(1)化为 hу=b, (3)此处y=lTx,b=l-1?,h=l-1Al-T,而再对(3)用共轭梯度法,计算公式为k=0,1,2,…)适当选取B,当B很接近A时,h的条件数较之A大大减小,从而可使共轭梯度法的收敛速度大为加快,由一些迭代法的矩阵分裂A=M -N,可选取M 为这里的B,例如对称超松弛迭代(SSOR),强隐式迭代(SIP)等,这类方法常称为广义共轭梯度法或预条件共轭梯度法,它也可用于解代数特征值问题。

...

转载请注明出处51数据库 » 软件算法说明书

软件
前端设计
程序设计
Java相关