什么是消息摘要算法
消息摘要算法又有一个通俗的名称——数字指纹。这样说的话其实可能大家还不是很清楚。
举一个好理解一点的例子大家都知道指纹可以唯一的确定一个人的身份,因为每个人的指纹是独一无二的。好了,我们在使用支付宝的时候我们会录入指纹,此时这个指纹就成了我们验证时的依据,当支付宝需要验证支付过程中支付者的身份的时候就只需要我们提供相应的指纹就可以了。这个时候我们的指纹就是我们对于支付宝而言的“消息摘要”,而他通过我们录入的指纹给我们生成的验证数据的过程就可以看作是“消息摘要算法”。
消息摘要算法的分类以及相关算法
消息摘要算法
- MD
- MD2
- MD4(Sun(JDK)和 Commons Castle 不支持 )
- MD5
//每一个都较前一个的安全性有所提高,电驴用的就是改进的MD4
- SHA
1.SHA-0
2.SHA-1在公布后不久就被撤回,因为NSA发现它含有会降低密码安全性的错误
3.SHA-2(SHA-224、SHA-256、SHA-384、SHA-512) - MAC
相应实现方式的比较
算法 | Sun(JDK) | Bouncy Castle | Commons Codec |
---|---|---|---|
MD | Sun提供的算法较为基础,支持MD2和MD5两种算法,但是缺少了相应的进制转换实现,不能将其字节数组的摘要信息转为十六进制字符串 | BC是对Sun的友善补充,提供了对MD4的算法支持。支持多种形式的参数输入,支持十六进制字符串形式的摘要信息。 | 如果仅仅需要实现MD5算法的话使用CC完成消息摘要是一个不错的选择。他支持多种形式的参数,支持十六进制形式的的摘要信息 |
SHA | Sun提供了较为底层的SHA算法的实现,如SHA-1、SHA-256、SHA-385和SHA-512四种算法,但是缺少了相应的进制转换实现。 | BC是对Sun的友善补充,提供了对SHA-224d的支持,支持十六进制字符形式的摘要信息 | CC对Sun的算法做了包装,支持多种的参数、支持多种形式的摘要算法 |
MAC | 提供了基本的算法支持,如HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384 | BC在在Sun的基础上添加了对HmacMD2、HmacMD4和HmacSHA224三种算法的实现 |