1. MD5和SHA-256
- MD5和SHA-256都是密码散列函数,加密不可逆,所谓的解密实为暴力破解。
- MD5和SHA-256可以实现对任意长度对象加密,这就决定了传入参数类型为byte数组,如果为int或者其他类型,就不能满足上述要求,任何对象都可以被转成byte数组,为了保持通用性而这样设计。
- MD5和SHA-256都不能防止碰撞,只是SHA-256碰撞几率小于MD5,这也是MD5被逐渐抛弃的原因,除非被加密的数据并没有那么大的价值才会用MD5加密。
1.1 MD5简介
MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(哈希值),用于确保信息传输完整一致。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。对于任意长度的消息,这个摘要相当于是个长度为16个字节的数组,通常用一个长度为32的十六进制字符串来表示。找了一个 MD5在线加密工具可以验证自己代码的加密结果。
1.2 SHA-256简介
SHA-256信息摘要算法,也是一种密码散列函数对于任意长度的消息,SHA256都会产生一个256bit长的散列值(哈希值),用于确保信息传输完整一致,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示。找了一个 SHA-256在线加密工具可以验证自己代码的加密结果。
2. Java代码实现
Java代码实现消息加密
public class MyEnCode {
//Java代码实现MD5消息加密
public static String MD5(String data) throws Exception {
//返回实现指定摘要算法的MessageDigest对象
MessageDigest md = MessageDigest.getInstance("MD5");
//使用指定的字节更新摘要
md.