小议MD5加密字符串的防破解技术

     原文地址:http://www.zendstudio.net/archives/anti-crack-md5/

     md5无疑是这个时代人们所最为津津乐道,最为常用的一项加密算法,其以加密强度颇大而著称,理论上通过穷举碰撞来猜解密文,得出原文,需要很强悍的计算机昼夜不停的工作N久才能完成,所以MD5算法的使用范围极为广泛~

     然而,似乎自然界都遵循“枪打出头鸟”的原则,所以,在MD5流行的同时,人们也想出各种猜解手段来攻击MD5算法,例如:字典穷举、MD5crack,但其效率不高,成功率也很低,目前最有效的破解MD5算法的方法是查询,猜解的对象是针对会员密码!其原理就是将大量的口令收集起来,然后让他们与自己的MD5密文一一对应,需要的时候对其查询,得出原文,随着其收集数据量的增加,破解成功率是相当高!目前国内最大的专营此业务的网站是CMD5.COM(http://www.cmd5.com/),其数据库号称已达4T,也就是 4*1024G,4000G的数据,换成电影的话(按800M一部)至少可以放5000部电影,按一天看10部的话,这些电影要超过一年半的时间才能从头到尾看一遍,还周末、国家法定节假日不休息!!!

      哈哈,扯远了。本文要讨论的中心就是如何让这种破解方式也失效~好的,开工,在这之前我们必须明白,为什么MD5被破解,很大的原因是因为原文太短了,或者太“简单了”,诸如“123”,“abc”……,先来个实验:

      动网默认的管理员密码是admin888,其MD5值是7fef6171469e80d32c0559f88b377245,放到cmd5.com上,不到1秒钟即出来原文!


图1:用“admin888”做密码轻易被破解


     好的,我们把7fef6171469e80d32c0559f88b377245再MD5一次,即md5(md5('admin888'));得到的值是0b77520f93de693bdab0060746e38165,把这个值再拿到cmd5.com上去破解,过了很长时间,足有1分钟,提示“error!”,可以肯定没有破解成功!


图2:MD5串没有破解出来


     哈哈!基本上就是这个思路了,因为第二次要破解的原文是一个32位的数字字母的结合,任它再牛B的硬盘也存不下这样的数据!
这里我写了一个递归函数来增加强度。

     
<?php

$testStr='admin888';
$testC=10;

echo Xmd5($testStr,$testC);

function Xmd5($str,$c=0){
    if($c>0){

        $str=Xmd5(md5($str),--$c);

    }

    return $str;

}

?>

     10次MD5,这样加密出来的串应该够强大了,如果我们用这个方法来为会员密码提供加密,然后让管理员可以在后台设置XMD5的次数,那这样的密文强度将大大提高!

     经常用GET方法传递参数的时候,这里将 $testC=mt_rand(100,999); 这样或许对安全性也有一定的帮助!~

     还有一个问题是,多次的MD5会不会影响脚本性能,因为要进行相当复杂的计算~

     我把'admin888'用md5加密了1000次,测试结果大概是这样:


     79cbb81f5a6eb616b6897f61e7c76380
     执行时间0.00805997848511 秒


     测试结果显示,基本上属于正常范围,大可以放心使用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值