您的位置 首页 java

警告 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

在线测试

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

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

其他网站

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

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

王小云教授的碰撞算法

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

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

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

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

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

为王教授点赞。

解决方案

MD5加盐

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

MD6

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

文章来源:智云一二三科技

文章标题:警告 MD5算法已不安全 是时候加把盐了

文章地址:https://www.zhihuclub.com/178609.shtml

关于作者: 智云科技

热门文章

网站地图