数字摘要,也叫消息摘要。它是一种单向的,不可逆的加密算法。发送方:采用单向hash函数对消息进行计算,得到摘要。发送消息和摘要。接收方:把接收的消息,按着同样的hash函数计算,新产生的摘要和发送来的原摘要进行对比。如果2个摘要不一致,说明消息不完整了。
特点:
- 无论输入的消息有多长,计算出来的摘要长度是固定的。
- 消息摘要具备的基本性质:不同的消息,计算出来的摘要不同;相同的消息,计算出来的摘要相同。
- 消息摘要是单向、不可逆的。从计算出的摘要中,不能逆向得到消息内容。
常用的消息摘要算法:
1.MD5算法
public static byte[] testMD5(String content) {
MessageDigest md = null;
byte[] result=null;
try {
// 生成一个MD5加密计算摘要
md = MessageDigest.getInstance("MD5");
logger.info("MD5摘要长度:" + md.getDigestLength());
result = md.digest(content.getBytes("utf8"));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
logger.info("MD5摘要内容"+byte2Hex(result));
return result;
}
2.SHA算法
说明:基于MD4算法。它生成的摘要长度是160位,由于生成摘要更长,运算过程更加复杂,在相同硬件下,SHA-1的运行速度慢于MD5,但是也更安全。
public static byte[] testSHA(String content){
byte[] result=null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
result= md.digest(content.getBytes("utf8"));
logger.info("SHA摘要内容"+byte2Hex(result));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}