MD5消息摘要算法(MD5 Message-Digest Algorithm)为计算机安全领域广泛使用的一种Hash算法,用以提供消息的完整性保护。
MD5主要特性有:
1、不可逆性,容易加密,极难解密;
2、唯一性,不同的输入内容有不同加密的结果;
3、压缩性,任意长度的内容加密后都是32位,传输、验证、存储方便,对于验证大文件的完整性优势显著。
MD5典型应用场景:
1、用户密码加密存储,防止数据库内容被窃取后用户密码暴露;
2、数据一致性校验,防止数据传输过程中被拦截篡改,发送端将参数params和加密的密文sign(即为摘要)发送出去,接收端约定使用相同的方式对参数进行加密比对,一致则响应;
3、大文件分片传输的完整性校验,分片前的文件加密和接收拼接完的文件加密比对,一致则完整;
4、数字签名中的应用,由于非对称算法的运算速度较慢,所以在数字签名协议中,对消息摘要进行数字签名与对文件本身进行数字签名被认为是等效的。
java生成32位大写MD5简单工具类:
/**
* @description: 生成32位大写MD5加密字符串
* @param: String
* @return: String
* @auther: WZH
* @date: 2019/8/5 22:02
*/
public static String getMD5(String s) {
char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
try {
byte[] btInput = s.getBytes();
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
char[] str = new char[md.length * 2];
int k = 0;
for (byte byte0 : md) {
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}