消息摘要算法:防止消息在传递过程中被篡改。
主要有三种常用的:
MD:message Digest 消息摘要
SHA: Secure Hash Algorithm 安全散列算法
Mac:message Authentication code 信息认证码
原理:任何消息经过消息摘要算法后,都会产生唯一的散列值(即“数据指纹”)(同一段消息无论经过多少次相同的消息摘要算法加密,结果都相同),所以如果消息在传送过程中被修改,那么算出来的数据指纹也与原本的消息算出来的不同了,如果没有被修改,则数据指纹是相同的。
特点:单向性(即只有加密,没有解密)
MD5(算法已被破解)
实现方式:
- Commons Codec(“CC”,推荐:封装了JDK的底层代码,并且提供了二进制字节数组向十六进制转化的方法)
- JDK(没有提供二进制字节数组向十六进制转化的方法,想要进行转化,需要借助BC或者CC)
- Bouncy Castle(“BC”,不推荐,实现比较复杂,这里就忽略不在描述)
导入依赖:
加密方法:
SHA:原理:消息摘要长度(可以定量为加密后的字符串的长度)越长,安全性越高
- MD5:128位二进制摘要(32位16进制字符串)(已破解)
- SHA1:160位二进制摘要(40位16进制字符串)(已破解)
- SHA256:256位二进制摘要(64位16进制字符串)(常用,在spring security中也有使用到)
mac(又称为Hmac):原理:在md与sha系列算法的基础上加入了密钥,是三大常用的消息摘要算法中最安全的一个
常用的mac算法:
- HmacMD5
- HmacSHA1
HmacSHA256
这三种方式都是得到指定信息的信息摘要,只不过加密的方式是越来越复杂了,越来越难破解了,像MD5和SHA1据说已经被破解了,所以想要最安全的话推荐使用最后一种HmacSHA256或者更长的都行