泄密门与密码储存

考试结束了,寒假来了,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 发表,本文链接:https://kayosite.com/about-md5-and-password.html

评论列表

  • 评论者头像
    回复

    第一次那么详细地了解MD5怎么加密,高兴的是居然都看懂了。

    • 评论者头像
      回复

      @杜小白 这就证明小白的理解能力和我的表达能力都是不错的! :mrgreen:

  • 评论者头像
    回复

    我深刻的表示我看不懂…

  • 评论者头像
    回复

    MD5没有很深的了解。

    • 评论者头像
      回复

      @Demon 我也是学了PHP才开始用md5,不过这种不可逆的算法还真是挺好用的!

  • 评论者头像
    回复

    期待我的寒假~~

  • 评论者头像
    回复

    不可逆算法加密的破解都是靠字典~
    这是SAE推荐的一种加盐方式:
    http://files.note.sdo.com/6Ls5T~jLDM79nM1G4003mA

    • 评论者头像
      回复

      @独自流浪 嗯,加入干扰字符串,比较安全而且运行速度应该也很快!

  • 评论者头像
    回复

    对付MD5字典,很简单,混合下或者多次MD5…我觉得这样做后很难破解。 :oops:

    • 评论者头像
      回复

      @。潇 嗯,如果不怕麻烦,可以弄个多次分割数据再md5,足够安全了!

  • 评论者头像
    回复

    这方面不懂诶。。。

  • 评论者头像
    回复

    SHA目前只有王晓云的碰撞试验

    如果用彩虹表的话,不知道成功率有多少

    • 评论者头像
      回复

      @Louis Han 王晓云的是SHA-1的碰撞实验,SHA-256暂时还没有什么有效的碰撞实验。所以这货现在还是座堡垒!

  • 评论者头像
    回复

    為了安全 還得嚴格的給自己充電再掌握一門學問
    HOHO

    • 评论者头像
      回复

      @心淡若水 嗯,学无止境,现在我是越学越觉得自己掌握的知识太少了!

  • 评论者头像
    回复

    经常忘记密码,我一般直接新建个用户,然后找数据库的密码字段,覆盖到管理员密码那,嘿嘿,MD5的好处。

    • 评论者头像
      回复

      @凹凸曼 嘻嘻,我之前wp升到3.3后用户名莫名的被改成admin,也是用这个办法搞定的 :mrgreen:

  • 评论者头像
    回复

    第一次真正知道了MD5怎么加密 而且大致看懂了哈哈 :oops:

    • 评论者头像
      回复

      @netyang :mrgreen: 其实只要MD5加密了,数据就会安全多了,起码多一份保障!

  • 评论者头像
    回复

    以前搞教育局網站的時候弄到的MD5,
    之後對應字典,
    盡然查到了。
    然後… :mrgreen: :mrgreen:

  • 评论者头像
    回复

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

    • 评论者头像
      回复

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

回复

你正在以游客身份访问网站,请输入你的昵称和 E-mail