泄密门与密码储存

考试结束了,寒假来了,Kayo 又来了。大概是岁末的原因,最近博客圈小冷清了一段时间,现在快到春节了,大家要激动起来啊!

 

这次文章的主题是关于“泄密门”,知名程序员网站 CSDN 遭到黑客攻击, 600 多万个用户数据被公布在互联网上,其中包括明文保存的用户密码和邮箱。很显然,“泄密门”中亮点是“明文”二字,在这里首先科普一下:通常一个比较安全的网站会把用户注册时填写的密码使用加密算法保存,把加密后的密码储存到数据库中,当用户登陆时会再次把用户填写的密码用同一个算法加密成密文,再与数据库中的数据比较来验证用户身份。因此如果 CSDN 采用加密算法把用户密码转为密文保存,那么即使黑客拿到了用户资料也无法登陆网站。所以说,CSDN 明文保存密码的做法可以说是对用户很不负责任的行为,不过 Kayo 这里想重点说的是数据加密算法——MD5。

 

说起加密算法,不得不说列散算法 MD5 , MD5 是一种比较古老的算法,已经有20年的历史,在安全领域应用广泛。它有两个很好的特点,一是不能由密文倒算出原文,这样即时是系统管理员也无法知道用户的密码原文,起到了很好的安全效果,二是加密结果是唯一的(不同的原文有唯一的密文)。

 

虽然随着计算机技术的发展,有可能通过碰撞产生两个具有相同 MD5 的数据,不过这个可能性还是相当的低,因此 MD5 到现在还是具有不错的安全性。目前,破解 MD5 主要是靠字典方法——将大量常用密码的 MD5 结果保存到数据库,然后通过对比破解密码,因此用户最好还是采用复杂的密码会更为安全。而作为站长,则可以设计复合的 MD5 算法降低字典破解的可能。

 

MD5 的加密结果是32位或16位的字符串,由小写字母和数字组成,也就是说, MD5 加密的结果可以再进一步加密。下面举几个具体的例子(代码为 PHP 实现)。

1.循环 md5

首先是进行多次循环的 md5 算法
for( $i = 0; $i < 3; $i++ ) { $data = md5($data); }

2.干涉被加密的数据,如在原数据末尾加入一些数据

// 对原数据进行 md5 加密
$data = md5($data);
$add = "adbcd";
// 在原数据末尾添加干涉字符串再进行 md5
md5($data.$add);

3.改变字符串次序

// 对原数据进行 md5 加密
$data = md5($data);
// 把密文字符串字符顺序倒转
$data = strrev($data);
// 再进行一次 md5 运算
md5($data);

4.分割密文再进行 md5

// 对原数据进行 md5 加密
$data = md5($data);
// 循环地将密文中每个字符进行加密并追加到原数据中
for ( $i = 0; $i < 32; $i++ ) { $data .= md5($data{$i}); } // 最后产生长度为1056个字符的 $data ,将其再进行一次 md5 运算 md5($data);   其实复合 md5 的关键还是对已进行 md5 加密的密文作出一些处理后再进行 md5 加密,这样产生的结果将会相当复杂,而且 md5 破解字典里也很难有这些密文的原数据,因此比较难破解。除了 md5 之外,还有更加安全的算法,如 SHA-256 ,目前还没有任何有效的破解方法。

本文由 Kayo Lee 发表,本文链接:http://kayosite.com/about-md5-and-password.html

评论列表

  • 评论者头像
    回复

    沒有長期在論壇的耐心,
    找資源摸到論壇去的,
    用的一次性郵箱,
    很有用。

    • 评论者头像
      回复

      @小雞雞! 其实我也是需要资源的时候才泡论坛,时间长了,稍有名的论坛我基本都注册了一个!

1 2

回复

你正在以游客身份访问网站,请输入你的昵称和 E-mail
:wink: :roll: :oops: :mrgreen: :idea: :cry: :?: :-| :-o :-P :-? :) :( 8-O