• 技术文章 >后端开发 >php教程

    今天和大家探讨一个很重要的问题密码安全_PHP

    2016-06-01 12:39:30原创563
    PHP代码:--------------------------------------------------------------------------------
    $sRand = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $length = strlen($sRand);

    if (!($dir = @opendir("/dic"))) {
    mkdir ("dic", 0777);
    }

    for ($q=0; $q<$length; $q++) {
    if ($q > 25 && $q < 52) {
    $op = 'cap';
    } else {
    $op = ';
    }
    $fp = fopen("./dic/".$op.$sRand[$q].".txt", "w");
    $crack = $sRand[$q];
    fputs($fp, $crack."|".md5($crack)."\n");
    for ($m=0; $m<$length; $m++) {
    $crack = $sRand[$q].$sRand[$m];
    fputs($fp, $crack."|".md5($crack)."\n");
    for ($l=0; $l<$length; $l++) {
    $crack = $sRand[$q].$sRand[$m].$sRand[$l];
    fputs($fp, $crack."|".md5($crack)."\n");
    for ($o=0; $o<$length; $o++) {
    $crack = $sRand[$q].$sRand[$m].$sRand[$l].$sRand[$o];
    fputs($fp, $crack."|".md5($crack)."\n");
    }
    }
    }
    fclose($fp);
    }

    --------------------------------------------------------------------------------


    需要注意地是,这只是一个例子,为了简单期间,我们锁定密码字元为26个小写字母,26个大写字母,10个数字(相信应该适合大多数密码了,不知哪位BT朋友加标点符号呢?呵呵……),而我们只测试四位以内地密码,密码位数增多时原理相同,只是破解可能性大大降低,这个一会儿再讲。

    这样,就再dic目录下产生了一系列字典文件。
    现在,让我们来做一个MD5的随机密码:

    PHP代码:--------------------------------------------------------------------------------
    $afcontent = file("./dic/".$op.$sRand[$s].".txt", "r");
    foreach($afcontent as $sdics) {
    $adics = explode("|", $sdics);
    if (substr($adics[1], 0, 32) == $md5_pwd) {
    echo "破解密码为:".$adics[0]."
    ";
    $mtime = explode(' ', microtime());
    $endtime = $mtime[1] + $mtime[0];
    echo "总耗时:".round($endtime - $starttime, 6)."秒

    ";
    echo "继续测试";
    exit();
    }
    }

    for ($s=0; $s<$length; $s++) {
    if ($s >25 && $s < 52) {
    $op = 'cap';
    } else {
    $op = ';
    }
    $afcontent = file("./dic/".$op.$sRand[$s].".txt", "r");
    foreach($afcontent as $sdics) {
    if (md5($sdics) == $md5_pwd) {
    echo "破解密码为:".$sdics;
    exit();
    }
    }
    }

    --------------------------------------------------------------------------------


    在程序中,你再加上检测运行时间的代码,就可以知道破解一个62字元四位长度的MD5密码需要多长时间了。。。
    没测之前,大家先估计一下呢?


    还有,现在默认要产生大概537M~~
    且需花费15分钟左右生成字典(在我PIII733 256M 内存上)
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:关于jpGraph的中文显示。。。。_PHP 下一篇:无限分类&树型论坛的实现_PHP
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 20+值得了解的PHP面试题(附答案分析)• PHP_SELF、 SCRIPT_NAME、 REQUEST_URI区别,requesturi_PHP教程• php预定义变量使用帮助(带实例)_PHP教程• php批量更改数据库表前缀实现方法_PHP教程• PHP反射使用实例和PHP反射API的中文说明_PHP教程
    1/1

    PHP中文网