Java摘要算法学习日记
- 摘要的作用
- MD家族的摘要算法
- sha(安全散列算法)
- MAC(含有秘钥的散列函数算法)
摘要的作用
- 摘要的作用主要是验证数据的完整性
举个例子:
我们去apche下载jar包时网页上有个sha512的链接,点击后会看到一串sha512摘要值
b6d517db15aedc424d112b8f3282c63f56aae66adaf317baf9853da65e291eb03fb5da51792aa437c7fdce63f6685c75373265e2a035b51e7525048716d7bfe3
当我们下载玩文件后查看一下文件的sha512摘要值,如果和网站上给出的一样则说明文件是完整的,否则文件就是不完整的。
MD家族的摘要算法
算法 | 摘要长度 | 实现方 |
---|---|---|
MD2 | 128 | JDK |
MD4 | 128 | Bouncy Castle |
MD5 | 128 | JDK |
Bouncy Castle是对JDK的扩展补充、commons Codec是对jdk已有的算法提供简便操作
如果是计算MD5或MD2:选择用apche commons Codec提供的实现会比较好,因为它基于原生jdk上给我们进行封装,api比较友善
/*
apche commons Codec提供便捷计算MD5和MD2方法
*/
String sc = "study security md";
System.out.println("cc md5Hex:"+ DigestUtils.md5Hex(sc));
System.out.println("cc md2Hex:"+DigestUtils.md2Hex(sc));
md摘要的使用场景
- 实现用户密码的加密存储
sha(安全散列算法)
算法 | 摘要长度 | 实现方 |
---|---|---|
SHA-1 | 160 | JDK |
SHA-224 | 224 | Bouncy Castle |
SHA-256 | 256 | JDK |
SHA-384 | 384 | JDK |
SHA-512 | 512 | JDK |
//apche commons Codec提供便捷计算sha1
System.out.println("cc1 sha1:"+ DigestUtils.sha1Hex(sc));
System.out.println("cc2 sha1:"+ DigestUtils.sha1Hex(sc.getBytes()));
sha算法的使用场景
- 网站安全证书的指纹
- 消息鉴别
MAC(含有秘钥的散列函数算法)
它是一个sha和md的缝合怪,同时包含秘钥
算法 | 摘要长度 | 实现方 |
---|---|---|
HmacMD2 | 128 | JDK |
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 |
String key = "aaaaaaaaaa";
//commons codec做HMAC-MD5摘要
String hmacMd5 = new HmacUtils(HmacAlgorithms.HMAC_MD5, key).hmacHex(sc);
System.out.println("cc hmacMD5Hex:"+ hmacMd5);
- 消息鉴别