资讯/排行 | 专题 | 访谈 | 招标 | 展会 | 商情 | 大全 | 论坛 | 求职 | 图片 | 校园 | E周刊 | RSS
教育装备 | 数字化校园 | 投影及显示 | 投影幕 | 电子白板 | 实验仪器 | 语音室 | 摄录编 | 技术中心
慧聪网首页 > 教育行业 > 技术文章 >
行业搜索
最新求购
·求购摄录编设备
·求购晶体管
·求购笔记本
·宏基AS5101AWLMI笔记本..
·毕节学院磁性黑板询价采..
最新供应
·供应KQ-400DB数控超声波..
·供应无线扩音机系统(Ch..
·供应无线扩音机系统(Fo..
·供应无线麦克风系统(R-..
·供应无线扩音机系统(Ch..
文字广告
热点专题
·火热的岁末教育市场喜庆..
·慧聪网当“婚娘”助您牵..
·2006教育行业信息技术年..
·2006年慧聪网教育行业投..
·透过国界看——远程教育
·“动感主角看过来”顶级..
热门搜索关键词
投影机 服务器 仪器 PC
远程教育 实验室 传感器
校园网 教育信息化 招生
教育部 周济 英语 留学
高考 就业 中小学 教材
大话教育
24岁女老师爱上15的小..
清华大学附属中小学网..
《彼德与狼》精彩推荐
100人的小工厂怎么竞争?
“OD办公”杀入中国 行..
网络营销就得要剑走偏..
企业、个人合理避税大..
图说教育
高校中流行“换客
”风
大学教师状告中体
倍力在崇文法院开庭
上海师大招聘学生
辅导员 录取比例1:17
IBM校园大赛
使用MD5变换算法来防止穷举破译密码
2007年1月18日 9:55  来源:赛迪网安全社区  作者:lvvl  
    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字符,或者每一段的字符数不相等……

变换三:附加字符串干涉

在加密过程的一个步骤中,附加一个内容确定的字符串(比如说用户名),干涉被加密的数据。不可以用随机字串,因为这样会使原算法无法重现。这种算法在某些情况下是很具有优势的,比如说用于大量的用户密码加密,可以把用户名作为附加干涉字串,这样攻击者就算知道你的算法,也很难从他们手中的字典中一下子生成海量的对照表,然后大量地破译用户密码,只能有针对性的穷举为数不多的用户。

//附加字符串在原数据的尾部
function md5_3_1($data, $append)
{
return md5($data.$append);
}
//附加字符串在原数据的头部
function md5_3_2($data, $append)
{
return md5($append.$data);
}
//附加字符串在原数据的头尾
function md5_3_3($data, $append)
{
return md5($append.$data.$append);
}
?>

变换四:大小写变换干涉

由于PHP所提供的md5()函数返回的密文中的英文字母全部都是小写的,因此我们可以把它们全部转为大写,然后再进行一次MD5运算。  

function md5_4($data)
{
//先得到密码的密文
$data = md5($data);
//再把密文中的英文母全部转为大写
$data = strtotime($data);
//最后再进行一次MD5运算并返回
return md5($data);
}
?>
 
 [关键词]:杀毒 病毒安全 软件  发表评论    【推荐】 【打印

特别推荐:
·慧商金字塔启动 邀您一起登峰
·2006年秋季全国高教仪器设备展
更多精彩:
·教育行业10月热搜产品数据分析
·安全采购 请走人行横道
相关文章 更多 
·Windows2000Server系统共享安全知识  (1.17 10:42)
·为Windows Vista添加个性化标志  (1.16 10:52)
·让Windows XP系统也能实现立体窗口  (1.16 10:52)
·教你获取WindowsNT的Admin权限的方法  (1.15 10:23)
·北京市摄像机及附件等项目招标公告  (1.15 8:51)
·深圳市宝安区软件制作室等项目招标  (1.12 10:2)
·NI发布数据交互式软件最新版本DIAdem 10.1  (1.12 9:53)
·禁用Scripting Host 防范网页的黑手  (12.30 10:47)
·教你手动查杀病毒和木马的通用方法  (11.3 11:31)
·近日发现新蠕虫病毒Worm_Stration.WO  (10.18 11:31)

我来评两句〖查看最新评论〗 
请您注意:
·遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而导致的法律责任
·本网留言板管理人员有权删除其管辖留言内容
·您在本网的留言,本网有权在网站内转载或引用
·参与本留言即表明您已经阅读并接受上述条款
昵称:匿名