警告 MD5算法已不安全 是时候加把盐了

警告 MD5算法已不安全 是时候加把盐了

对信息系统或者网站系统来说,MD5算法主要用在用户注册口令的加密。由于MD5算法输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆的特性,被广泛应用于密码加密领域。

MD5 算法在 2004 年前让人们确信,它能保卫电子签名在现实中的绝对安全。2004 年前,大部分软件开发商、认证中心、网站等使用 MD5 算法。

从安全的角度讲,MD5的输出为128位,若采用纯强力攻击寻找一个消息具有给定Hash值的计算困难性为2128,用每秒可试验1000000000个消息的计算机需时1.07×1022年。若采用生日攻击法,寻找有相同Hash值的两个消息需要试验264个消息,用每秒可试验1000000000个消息的计算机需时585年。

不过这都是以前的说法了,其实MD5并非是绝对安全的。

JAVA生成MD5串过程

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Test {
/**
*
* @param key 要加密的字符串
* @return MD5加密后的字符串
*/

public static String getMD5key(String key){
try {
//1.从jdk获取消息摘要算法中的MD5算法
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
//2.加密的结果为10进制
byte[] md5ValueByteArray = messageDigest.digest(key.getBytes());
//3.将10进制 转换16进制,第一个参数为符号位,1表示为正数
BigInteger bigInteger = new BigInteger(1 , md5ValueByteArray);
return bigInteger.toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
//如果失败,返回原来的值
return key;
}
}

public static void main(String[] args) {
System.out.println(Md5Test.getMD5key("123"));
}
}

运行得到123的MD5加密串

202cb962ac59075b964b07152d234b70

在线测试

对于简单的串直接使用在线工具就可以查出来

警告 MD5算法已不安全 是时候加把盐了

类似工具百度一下没有100也有80个吧。网站声称:针对md5、sha1等全球通用公开的加密算法进行反向查询,通过穷举字符组合的方式,创建了明文密文对应查询数据库,创建的记录约90万亿条,占用硬盘超过500TB,查询成功率95%以上,很多复杂密文只有本站才可查询。

其他网站

警告 MD5算法已不安全 是时候加把盐了

这是一张彩虹表

,主要包含了1-9位字符生成的MD5的全排列,意思就是说你的密码是在9位以内,基本上是可以直接查出来的。

警告 MD5算法已不安全 是时候加把盐了

MD5理论上是不可逆,因此只能通过反向查找匹配的方式来完成。

王小云教授的碰撞算法

MD5 算法在 2004 年前让人们确信,它能保卫电子签名在现实中的绝对安全。

如果要破解这种算法,按常规方法,即使调用当时先进的计算机,也需运算上百万年才有可能破解。

直到 2004 年,在美国加州圣芭芭拉召开的国际密码学会议上,通常大会发言人的发言时间限定在两三分钟,大会主席、国际顶级密码学家休斯破例给了王小云 15 分钟。王小云宣读了她主持的研究团队的成果,囊括了对 MD5、 HAVAL-128、MD4 和 RIPEMD 四个著名哈希算法的破解结果。

使用她的方法,在当时普通计算机仅运算一天的时间,就破解了 MD5。当她讲到第三个破解结果时,报告还未结束,会场上掌声雷动,很多密码学者激动得站起来鼓掌致敬。

多年来,哈希函数算法 MD5 与美国标准技术局颁布的算法 SHA-1,是国际上公认最先进、应用范围最广的两大重要算法。这两项技术最后都被王小云及团队破解。

解决方案

MD5加盐

MD5加盐,就是在Md5码上加上别的字符串(盐),所以即使有暴力破解的手段,不知道盐,依旧不能得到真正的Md5码。通过密码加盐,密码的安全性已经提高了不少。

警告 MD5算法已不安全 是时候加把盐了

MD6

MD5被攻破后,在Crypto2008上, Rivest提出了MD6算法,该算法的Blocksize为512 bytes(MD5的Block Size是512 bits), Chaining value长度为1024 bits, 算法增加了并行 机制,适合于多核CPU。 在安全性上,Rivest宣称该算法能够抵抗截至目前已知的所有的攻击(包括差分攻击)。

警告 MD5算法已不安全 是时候加把盐了


分享到:


相關文章: