当前位置:七道奇文章资讯安全技术网络技术
日期:2009-12-11 16:47:00  来源:本站整理

操纵数据库来破解md5[网络技术]

赞助商链接



  本文“操纵数据库来破解md5[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

为什么密码位数短的MD5不安全?


一个长度为4的纯小写字母生成的密码在数据库的帮忙下可以在0.005s内被破解.这个时间还包含了衔接数据库的时间,运行的环境是在我900MHZ的个人PC上.


注意,我们要谈论的是一种破解密码的思维,而不供应一种具体的办法.假如你的但愿和我们不一致,那么后边将不是你所需求的内容了.


前几天看MD5的资料时,我忽然冒出个设法:

假如借助数据库的海量存储和检索上风,破解较短长度的单向MD5应当不是很大的问题.

首先,我们假定密码长度为6的话(这是很多论坛采取的长度),假如密码都由小写字母构成的话,这个数据库要存储266条数据,每条数据的长度为6+40=46字节,那么这个数据库的大小是14210125696byte,大约为14G.关于一个大型数据库来说这样的数据量并不大.


为了使我的计算机可以对比快的实现我的设法,我假定密码长度为四位小写字母了.下边就让我们来看看历程.

我运行的环境:

Windows XP Pro,Apache1.3,MySql 3.23.49,PHP 4.0.6.

主频900MHZ,内存256M.


首先我在Mysql里成立了一个md库和一个md表用于存放密码和加密后的MD5字符.

表的构造以下:


然后通过程序来向里边增添数据:

<?php

// Connecting, selecting database

$link = mysql_connect("localhost", "root", "") or die("Could not connect");

print "Connected successfully<br>";

mysql_select_db("md") or die("Could not select database");


function getmicrotime()

{

list($usec, $sec) = explode(" ",microtime());

return ((float)$usec + (float)$sec);

}


$time_start = getmicrotime();

set_time_limit ( 0 );


echo '<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>md5</title>

<style>

<!--

html { font-family: Verdana; font-size: 9pt }

-->

</style>

</head>


<body>';


// create the password


for ($i = 97 ; $i < 123 ; $i++ )

{

for( $j = 97 ; $j < 123 ; $j++ )

{

for ( $k = 97 ; $k < 123 ; $k++ )

{


for( $l = 97 ; $l < 123 ; $l++ )

{


$name = chr($i).chr($j).chr($k).chr($l);

echo $name.' '.$md.'<br>';

$md = md5( $name );

mysql_query("INSERT INTO `md` (`pass`, `passmd`) VALUES ('$name', '$md');",$link);


}

}

}

}


$time_end = getmicrotime();

$time = $time_end - $time_start;


echo '<center>Runtime: '.$time.' seconds</center></font>';

echo '</body></html>';


?>

 

通过运行这个程序构建数据用掉了我大约五分钟的时间.

然后,一个很简单的脚本便可以实现密码破解查询了.

<?php

 

$link = mysql_connect("localhost", "root", "") or die("Could not connect");

print "Connected successfully<br>";

mysql_select_db("md") or die("Could not select database");


function getmicrotime()

{

list($usec, $sec) = explode(" ",microtime());

return ((float)$usec + (float)$sec);

}


echo '<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>md5</title>

<style>

<!--

html { font-family: Verdana; font-size: 9pt }

INPUT {

BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: Verdana

}

-->

</style>

</head>


<body>';


$time_start = getmicrotime();

set_time_limit ( 0 );


[1] [2]  下一页


  以上是“操纵数据库来破解md5[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>操纵数据库复制技术 实现数据同步更新</b>
  • 操纵数据库日记恢复数据到时间点的操作
  • 操纵数据库复制技术实现数据同步更新
  • 成立一个Java操纵数据库的桌面操纵程序
  • <b>操纵数据库内建工具帮助性能解析和优化</b>
  • 操纵数据库来破解md5
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .