MD5
加salt盐:每次哈希计算时生成一个随机数,加入计算,并将随机数一并发送,所以相同的明文每次加盐后得到的摘要都不同,有效防止反向查询
MD5不是加密,而是摘要,就是把任意长度的明文转换成固定长度的数字和字母串,这是单向唯一的。
具体来说,MD5是一种哈希函数,它接受任意大小的数据作为输入,并产生一个128位(32个十六进制字符)的输出,这个输出称为哈希值或消息摘要。MD5的设计目的是确保不同的输入数据几乎不可能产生相同的哈希值,即具有很强的唯一性。然而,MD5存在安全漏洞,可以被攻击者通过特定方法找到不同的输入数据产生相同的哈希值,这被称为碰撞攻击。
- 算法的公开并不意味着不安全;RSA 的算法也是公开的,AES 也是公开的。现代密码学的安全性从不是靠算法的保密来保证的。
- 目前没有软件能有效地破解 MD5。大多数时候只是把常见字符串的 MD5 存了起来为彩虹表,然后直接反查。
- 再次强调 MD5 只是哈希,而不是加密。MD5 是没有可能解密的,因为一个 MD5 可能对应无数种可能的明文。
- MD5 目前来说还是可以用的,尤其是考虑到合适的加盐以后可以解决大多数彩虹表带来的危险。当然现在已经很多人提倡用 SHA 系列的哈希算法取代 MD5。
MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)。
public static final byte[] computeMD5(byte[] content) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
return md5.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}