自定义MD5加强安全性[转载于开源中国并小改进]

编辑:逐风博客 2013-07-22 00:00:00 阅读热度:0
md5相对于一种指纹验证,也就是说不能根据密文推算出全部明文,因为理论上明文可以是无限的,但是可以推算出一部分,当然,不是现在,因为md5逆向算法还没有出来。

虽然说md5的密文是有限的,不过其数量为6.3340286662973277706162286946812e+49 ,如果对这个数字没感觉,你可以想象一下一亿的五次方再乘个几千万就差不多了。。。。。

以前接触过不少程序(当菜鸟黑客的那段时光……),大部分程序加密方式都是“md5”,而且是纯加密,本来这也没有错,以为md5算法毕竟没有被破解,但是随着特征字符串的收集,使用纯md5加密已经越来越危险。

自己写程序一般习惯加上特征字符串再MD5,自以为万无一失,但是今天发现cmd5居然可以破解这种加密方式,当然前提是要知道特征字符串,虽然我的更为复杂,不过出于防范心理,还是对加密函数进行了复杂化。
<?php
function md123($sstr)
{
    $md_asc="";
    $mds=md5('qwEqw'.$sstr.'2ddsdf');
    $mds=md5('rtrTtyr'.$mds.'zcv34r');
    for($i=1;$i< strlen($mds);$i++){
        $md_asc.=168/ord(substr($mds,$i,1));
    }
    return md5($md_asc);
}
?>
转载地址:http://www.oschina.net/code/snippet_258733_14398

改进之后:    
<?php
function md123($sstr)
{
    $md_asc="";
    $mds=md5('qwEqw'.$sstr.'2ddsdf');
    $mds=md5('rtrTtyr'.$mds.'zcv34r');
    $mds=md5($mds.rand());
    for($i=1;$i< strlen($mds);$i++){
        $md_asc.=168/ord(substr($mds,$i,1));
    }
    return md5($md_asc);
}
?>
上述改进只是多增加了一个随机函数,每次重新加载之后的MD5加密值都是不同的,这样可以更大浮动的保障信息安全,当然这样两次数据比对的难度也小有增大些;

可用于管理员用户密码更改处的校验值采用该方法;
PHP比较安全的获取站点根目录
PHP注释文档标记
逐风开发在线 逐风

懒惰:是这样一种品质,它使得你花大力气去避免消耗过多的精力。它敦促你写出节省体力的程序,同时别人也能利用它们。为此你会写出完善的文档,以免别人问你太多问题。