概述
看图,我们在下载commons-codec时候会有这么一个页面,我们点md5会有一个值,这个值是做什么呢?为什么会有这么一个值呢?这就是消息摘要算法的作用,验证数据的完整性。
消息摘要算法是数字签名的核心算法
MD(Message Digest)
在MD算法家族有MD2、MD4、MD5,从名称上看就可以看出它们的出现先后顺序,安全性也是一代比一代更强。我们过去使用的电驴用的是MD4算法,并且是对MD4算法做了改进,通过改进后主要用于对于要下载的文件做分块,都下载后再验证完整性。
算法 | 摘要长度 | 实现方 |
---|---|---|
MD2 | 128 | jdk |
MD4 | 128 | Bouncy Castle |
MD5 | 128 | jdk |
demo:todo
应用
注册的方式:
1.用户注册,把用户名、密码发送到服务器
2.对密码进行消息摘要处理
3.把摘要保存到数据库密码列
登陆的方式:
1.用户登陆,把用户名、密码输入
2.应用服务器对密码做摘要处理
3.通过用户名查询密码摘要
4.返回登陆结果
这样就可以把密码保护起来,通过数据库也看不到密码。几年前csdn的数据库被一些人搞到了,这时大家发现csdn的数据库对密码使用明文存储的,这样就造成了泄露大量的用户信息。csdn官方也及时做出了应对处理,让大家及时改密码。这事如果是发生在证券交易所、银行、基金这些网站上,那这个时候损失的就不仅仅是一些积分,这时候就是钱的事了。
SHA(Secure Hash Algorithm)
安全散列算法的简称,和MD一样都是固定长度摘要信息。SHA在很多场景被认为是MD的继承者,还有美国的官方背景,是美国的国家安全局设立,被美国的国家标准技术院发布的一些列散列函数,为什么说是一些列呢?因为SHA包含了SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512) 五种,但是人们通常喜欢把SHA-1外的统称为SHA-2。
是在MD4基础上演变出来的,和MD不同的是如果输入的消息对应的消息摘要的结果是差别是很大,这就没法判断一些很相近的东西,破解很难。不过,神农大学的王小云已经把MD5、SHA-1算法给破解了。
算法 | 摘要长度 | 实现方 |
---|---|---|
SHA-1 | 160 | JDK |
SHA-224 | 224 | Bouncy Castle |
SHA-256 | 256 | jdk |
SHA-384 | 384 | jdk |
SHA-512 | 512 | jdk |
Demo: todo
应用:
浏览器的证书就是一个实际应用的例子。
- 发送方公布消息摘要算法
- 发送方对待发送的消息做摘要处理
- 发送摘要消息
- 发送消息
- 接收方对消息做摘要,和收到的摘要做对比,鉴别消息
MAC(Message Authentication Code)
兼容了MD、SHA的特性,并且加入了秘钥,因此又叫HMAC (keyed-Hash Message Authentication Code),是含有秘钥的散列函数算法。分为两大系列,
- MD系列:HmacMD2、HmacMD4、HMacMD5
- SHA系列:HmacSHA-1、HmacSHA-224、HmacSHA-256、HmacSHA-384、HmacSHA-512
应用如SecureCRT
算法 | 摘要长度 | 实现方 |
---|---|---|
HmacMD2 | 128 | Bouncy Castle |
HmacMD4 | 128 | Bouncy Castle |
HmacMD5 | 128 | jdk |
HmacSHA-1 | 160 | JDK |
HmacSHA-224 | 224 | Bouncy Castle |
HmacSHA-256 | 256 | jdk |
HmacSHA-384 | 384 | jdk |
HmacSHA-512 | 512 | jdk |
demo :todo
1.发送方公布消息摘要算法
2.构建秘钥
3.发送秘钥给接收方
4.对消息做摘要
5.发送消息摘要
6.发送消息
7.消息鉴别
其它
- RipeMD
- Tiger
- Whirlpool
- GOST3411
这几种只能使用Bouncy Castle