中华网络安全联盟 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 进程知识 技术论坛
中华网络安全联盟 >> 安全技术 >> 加密解密 >> 使用MD5变换算法防穷举(冲撞)破译密码
安全技术
安全资讯
病毒预警
漏洞发布
安全教学
工具介绍
漏洞利用
病毒防范
入侵检测
防火墙
安全防范
汉化破解
攻击实例
加密解密
  • 破解交换机密码全过程

  • 在Windows XP中如何设

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

    中华网络安全联盟    作者:佚名    来源:ENET    时间:2006-8-22

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

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

      下面演示一些变换算法的例子

      当然,在其它的Web开发语言中,也大同小异,完全能得到相同的结果。

      变换一:循环MD5

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

      //迭代算法
      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位的密文。

      //把密文分割成两段,每段16个字符
      function md5_2_1($data)
      {
      //先把密码加密成长度为32字符的密文
      $data = md5($data);
      //把密码分割成两段
      $left = substr($data, 0, 16);
      $right = substr($data, 16, 16);
      //分别加密后再合并
      $data = md5($left).md5($right);
      //最后把长字串再加密一次,成为32字符密文
      return md5($data);
      }
      //把密文分割成32段,每段1个字符
      function md5_2_2($data)
      {
      $data = md5($data);
      //循环地截取密文中的每个字符并进行加密、连接
      for ($i = 0; $i < 32; $i++) {
      $data .= md5($data{$i});
      }
      //这时$data长度为1024个字符,再进行一次MD5运算
      return md5($data);
      }
      ?>

      当然,这种密文分割的具体算法是数之不尽的,比如可以把原密文分割成16段每段两字符、8段每段4字符,或者每一段的字符数不相等……

    [1] [2] 下一页  

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.