常用的数字摘要算法有MD5
,SHA
等,下面这对这些数字摘要算法来进行介绍。
将数据(如一段文字)运算变为另一固定长度值,是散列算法的基础原理。
MD5算法
消息摘要算法版本5(Message-Digest Algorithm 5)即MD5
,由Ron Rivest(RSA公司)在1992年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。MD2
、MD4
、MD5
都产生16字节(128位)的校验值,一般用32位十六进制数表示。MD2
的算法较慢但相对安全,MD4
速度很快,但安全性下降,MD5
比MD4
更安全、速度更快。
介绍
MD5
报文摘要算法:MD5
报文摘要算法将任意长度的信息作为输入值,并将其换算成一个 128 位长度的"指纹信息"或"报文摘要"值来代表这个输入值,并以换算后的值作为结果。MD5
算法主要是为数字签名应用程序而设计的;在这个数字签名应用程序中,较大的文件将在加密(这里的加密过程是通过在一个密码系统下[如:RSA]的公开密钥下设置私有密钥而完成的)之前以一种安全的方式进行压缩。[来自RFC1321]
MD5
用途广泛,对数据生成信息摘要放置被篡改,为大文件生成唯一的MD5
信息摘要,保证文件未被修改。
实现原理:
MD5
以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
MD5原理参考:
MD5算法原理
SHA1和MD5算法详解和源码
SHA算法
安全散列算法(SHA
)能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。也是一种比较常用的数据摘要算法,目前SHA家族主要有五个算法,对于这几种算法SHA家族中有介绍。
介绍
SHA
(Secure Hash Algorithm)是由美国专门制定密码算法的标准机构——美国国家标准技术研究院(NIST)制定的,SHA系列算法的摘要长度分别为:SHA
为20字节(160位)、SHA256
为32字节(256位)、 SHA384
为48字节(384位)、SHA512
为64字节(512位),由于它产生的数据摘要的长度更长,因此更难以发生碰撞,因此也更为安全,它是未来数据摘要算法的发展方向。由于SHA
系列算法的数据摘要长度较长,因此其运算速度与MD5相比,也相对较慢。
目前SHA1的应用较为广泛,主要应用于CA和数字证书中,另外在目前互联网中流行的BT软件中,也是使用SHA1来进行文件校验的。
实现原理
给消息附加填充位使其模512与448同余(M%512 == 448)。即使满足了条件也要填充512位(比特)。填充过程是这样的:先补一位1,后面一律补0,直至满足条件。因此至少填充1位,最多填充512位。
因为我们存储的时候是以字节为单位存储的,所以我们的消息的长度(单位:位)一定是8的倍数。而我们填充的时候也一定是8位,8位的来填充。也即不可能只填充一个二进制位,至少是8个二进制位(一个字节)。因此最少填充1个字节,最多填充64个字节(64*8=512)。
在附加填充位完成之后,还要附加长度,即附加64位数据来存储原始消息的长度。因为在附加填充位完成之后,消息长度(单位:位)是512与448同余,而此时再附加64位之后,消息长度就变成了512的整数倍。
最后我们开始计算消息摘要的时候,就是每512位为一组开始计算的。
其详细的实现参见什么是安全散列算法SHA256?
参考:数据摘要算法总结