消息摘要算法,即 Message Digest 算法,用于将任意长的消息转化为固定长度的摘要(一般为32字符)的计算过程。目前常用的MD5和SHA-1即是一种消息摘要算法。其特点是单向、不可逆且任意长度的数据都可以被摘要成固定长度的字符串。
MD5 算法
MD5指的是“Message-Digest Algorithm 5”,也就是消息摘要算法第五个版本,它是由RSA数据安全公司的罗纳德·李维斯特(Ronald L. Rivest)开发的,于1992年公布,被广泛地应用于计算机安全领域。MD5算法产生的摘要长度是32个字符,它对于任意长度的数据都会产生唯一的固定长度的值。
MD5算法的步骤如下:
- 填充:在明文后面填充一个1再添加若干个0,使得最后一段恰好满足512比特(64个字节)
- 追加长度:在填充后的明文的末尾,加上原文的长度信息(64比特),这样可以使得长度信息也参与到哈希值的计算中
- 分段处理:将填充后的明文分成若干个512比特(64个字节)的消息,每个消息对应一个MD缓冲区
- 压缩:每次处理一个消息,结果更新MD缓冲区。最后将MD缓冲区中的4个32比特进行拼接,就是最终的摘要
SHA-1 算法
SHA-1指的是“Secure Hash Algorithm 1”,也就是安全散列算法1,它是由美国国家标准技术研究所(NIST)发布的一种加密算法,被广泛使用于数字证书、TLS/SSL等通信协议,以达到保证数据传输安全的目的。
SHA-1算法的步骤如下:
- 填充:在明文后面填充一个1再添加若干个0,使得最后一段恰好满足512比特(64个字节)
- 追加长度:在填充后的明文的末尾,加上原文的长度信息(64比特),这样可以使得长度信息也参与到哈希值的计算中
- 分段处理:将填充后的明文分成若干个512比特(64个字节)的消息,每个消息对应一个缓冲区
- 压缩:每次处理一个消息,结果更新缓冲区。最后将缓冲区中的5个32比特进行拼接,就是最终的摘要
应用场景
Messagedigest算法广泛应用于数据完整性校验、数字签名、密码仿冒防范等场景。例如,当客户端发起一次HTTP请求时,可以在请求头中携带MD5值作为校验值,服务端接收到请求后,将请求体计算MD5值,并将计算结果与请求头中的MD5值进行对比,以确保数据完整性。
在实现密码存储时,通常会对明文密码进行散列存储,以保证在数据库泄漏的情况下,黑客无法直接获取到用户的密码。此时,可以使用MD5或SHA-1算法对密码进行散列存储,根据需要加上盐值来增加密码存储的安全性。
此外,在数字签名和身份验证等场景中也广泛应用Messagedigest算法,以保证数据的安全可信。