对信息系统或者网站系统来说, 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宣称该算法能够抵抗截至目前已知的所有的攻击(包括差分攻击)。