您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> php >> 正文

使用MD5变换算法防穷举(冲撞)破译密码

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-2-2 我要参与讨论

    MD5是在Web应用程序中最常用的密码加密算法。由于MD5是不可逆的,因而经过MD5计算得到后的密文,不能通过逆向算法得到原文。

  回顾在Web应用程序中使用MD5加密文本密码的初衷,就是为了防止数据库中保存的密码不幸泄露后被直接获得。但攻击者不但拥有数据量巨大的密码字典,而且建立了很多MD5原文/密文对照数据库,能快速地找到常用密码的MD5密文,是破译MD5密文的高效途径。然而,MD5密文数据库所使用的是最常规的MD5加密算法:原文-->MD5-->密文。因此,我们可以使用变换的MD5算法,使现成的MD5密文数据库无所作为。


  下面演示一些变换算法的例子
      当然,在其它的Web开发语言中,也大同小异,完全能得到相同的结果。

变换一:循环MD5

  最容易理解的变换就是对一个密码进行多次的MD5运算。自定义一个函数,它接受$data和$times两个形参,第一个是要加密的密码,第二个是重复加密的次数。实现这种变换有两种算法——

<?php
//迭代算法
function md5_1_1($data, $times = 32)
{
    //循环使用MD5
    for ($i = 0; $i < $times; $i++) {
        $data = md5($data);
    }
    return $data;
}

//递归算法
function md5_1_2($data, $times = 32)
{
    if ($times > 0) {
        $data = md5($data);
        $times--;
        return md5_1_2($data, $times); //实现递归
    } else {
        return $data;
    }
}
?>

变换二:密文分割MD5

  尽管用户的密码是不确定的字符串,但是只要经过一次MD5运算后,就会得到一个由32个字符组成的字符串,这时可以再针对这个定长字符串变换。有点BT的算法是,把这段密文分割成若干段,对每段都进行一次MD5运算,然后把这堆密文连成一个超长的字符串,最后再进行一次MD5运算,得到仍然是长度为32位的

[1] [2] [3] 下一页

在google里搜索更多使用MD5变换算法防穷举(冲撞)破译密码

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明