最近连连爆出各大网站的密码都是用明文存储的,搞得大家人心惶惶。但冷静下来之后,更多的是质疑——为什么是明文?为什么没有加密?
关于加密,在《科普第7篇——加密解密》里就说过了,有兴趣的可以去看看。 这里向大家保证,家族的密码不是明文的(如下图,图中的都是被永久禁言的用户,大家不用担心): [IMG]http://p.dmdjz.com/uploads/2012/01/%E9%80%89%E5%8C%BA_006.png[/IMG] 在password一栏里的都是MD5码。科普第7篇里说过,MD5是单向的,无法解密(注意:无法解密不等于无法破解),那么网站是怎么验证密码的呢? 在我们登录时,服务器会把接收到的密码计算一下MD5码,然后和存储的MD5码进行比对,如果一样的话就证明密码是正确的。 但是密码不是明文的并不代表你随便用个密码就是安全的。因为MD5码和明文的关系是一一对应的(其实这个说法不准确,下面会提到),一些简单密码的MD5码可以非常方便地查到(比如http://cmd5.com这样的网站,通过收集大量的MD5校验码来建立数据库供人查询)。比如: 明文:123456 二进制(十六进制表示):0x31 0x32 0x33 0x34 0x35 0x36 MD5码:e10adc3949ba59abbe56e057f20f883e 所以设置一个复杂的密码还是有必要的,这样即使密文泄露了破解起来也比较困难。 MD5还有个特点(其实是所有Hash算法的特点)就是,即使数据只发生了很小的变化,计算的结果也要有很大的改变。 比如还是上面这个例子,我们只改变二进制数的最后一位: 明文:123457 二进制:0x31 0x32 0x33 0x34 0x35 0x37 MD5码:f1887d3f9e6ee7a32fe5e76f4ab80d63 基于这个特点,网站存储密码时还有种方法是给密码后面加上一些其他字符,并进行多次MD5计算。 比如,同样是123456,我们在它的MD5码后面加上一个日期(比如注册日期)的校验码(比如20121221的MD5码1f69b3d54c2f95a014ea3cc131a34d5b),就成了 明文:123456 MD5码:e10adc3949ba59abbe56e057f20f883e 加上日期:e10adc3949ba59abbe56e057f20f883e1f69b3d54c2f95a014ea3cc131a34d5b 加上日期后的MD5校验码:efd2ff44702e71bcd5a86eee08f366aa 这种加上其他字符的方式叫做加盐(salt)。这样即使简单的密码也可以产生类似复杂密码的校验码,并且MD5码的长度是128位,我们在后面加上另一个校验码会产生有256位的假象,用来迷惑破解者。或者,我们可以把日期的校验码截取一下只要后面的32位,伪装成SHA-1码(另一种Hash算法,SHA-1码有160位)。 明文:123456 MD5码:e10adc3949ba59abbe56e057f20f883e 加上日期:e10adc3949ba59abbe56e057f20f883e31a34d5b(截取日期的后32位。32位二进制数用十六进制表示是8位) 加上日期后的MD5校验码:a0d4fe089415fae084993ec14dedae16 我们还可以继续加上另一个字符的MD5码的后32位(比如dmdjz的MD5码4951041c47ea2db2afe280a3d1909706),然后再把a0d4fe089415fae084993ec14dedae16d1909706这串字符存入数据库,这样加大了迷惑性难以破解。 不过除了简单密码容易破解之外,MD5还有一个弱点,那就是会产生碰撞,也就是说两个不同的数据会产生同样的MD5码(所以上面说的一一对应在这里就不对了)。当然计算出这个碰撞的结果是比较难的,不过为了安全,还是采用碰撞更少的Hash算法比较安全。比如SHA-1(SHA-1也已经被证明能够产生碰撞)或SHA-2(包括SHA-224、SHA-256、SHA-384、SHA-512,后面的数字是Hash码的长度)。 明文:123456 MD5码:e10adc3949ba59abbe56e057f20f883e SHA-1码:7c4a8d09ca3762af61e59520943dc26494f8941b SHA-224码:f8cdb04495ded47615258f9dc6a3f4707fd2405434fefc3cbf4ef4e6 SHA-256码:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 SHA-384码:0a989ebc4a77b56a6e2bb7b19d995d185ce44090c13e2984b7ecc6d446d4b61ea9991b76a4c2f04b1b4d244841449454 SHA-512码:ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413 当然,即使是SHA家族的算法,也依然是和明文有对应关系的,虽然也可以通过加盐来提高安全性,但你无法保证你所去的网站有这样做。所以最好的办法还是自己设定一个复杂的密码。 一个好的密码应该: 1、不使用常用的单词和句子,比如什么iloveyou、fuckyou啊之类的。 2、不使用纯数字密码,纯数字密码再长也是很好破解的。 3、最好是大小写字母、数字、符号混排。 4、好记。再好的密码,你自己记不住那也白搭。 5、定期更换。你永远也无法保证密码不会泄露,定期更换密码绝对是个好习惯。 不过…… 再好的密码,也敌不过明文存储啊! |
|
沙发#
发布于:2012-01-08 16:48
那个叫雪崩效应。
攻防都是很恩爱的,无所谓谁比谁厉害,哦哈哈哈。。 |
|
2楼#
发布于:2012-01-08 17:00
回 1楼(bleen) 的帖子
我倒不觉得有人会对论坛的资料感兴趣。。。HASH的特征是弱碰撞性,现在的技术已经可以从密文里面找到一对值相同的密文,但是无法对应哪个明文,所以还是安全的。 |
|
3楼#
发布于:2012-01-08 17:24
= =简单密码路过~~
希望没人黑我的团子0.0 |
|
|
4楼#
发布于:2012-01-08 17:32
两位技术党啊……只知道MD5和hash算法神马的但是一直不知道其原理的路过……
|
|
|
5楼#
发布于:2012-01-08 17:48
= = 完全么懂...
|
|
|
6楼#
发布于:2012-01-08 18:14
不敢复杂密码的啊,简单的都时常忘记。
|
|
7楼#
发布于:2012-01-08 18:53
虽然不是很懂 ,但感觉很安全!
|
|
8楼#
发布于:2012-01-08 18:58
密码 我基本所有都是一个密码 求高人帮我看看我QQ的密保什么的 我忘记了........
|
|
|
9楼#
发布于:2012-01-08 19:11
看不懂...密码简单的要死,却从没被盗过号。
不过...盗我号也没用 |
|
10楼#
发布于:2012-01-08 19:32
前段时间邮箱刚被盗……
|
|
|
11楼#
发布于:2012-01-08 19:59
用户被禁言,该主题自动屏蔽! |
|
12楼#
发布于:2012-01-08 20:01
明文密码太无语了
家族应该还安全吧,因为没有贼惦记 |
|
|
13楼#
发布于:2012-01-08 20:57
本面包师的最近几年的密码安全性应该还不错,至于以前的……呵呵……
但是习惯了,所以也不太想改…… |
|
|
14楼#
发布于:2012-01-08 21:16
本人的是密碼如果是有關$的要用不同的,其他的沒有什麼特別就同1個..
|
|
15楼#
发布于:2012-01-08 22:53
额,密码不复杂的飘。
太难记不住。。 |
|
16楼#
发布于:2012-01-08 23:23
改密码其实很烦。。唉
|
|
17楼#
发布于:2012-01-08 23:35
三天两头各种账号被盗。。
姐记性不好。。密码还都设的一样的。。 |
|
|
18楼#
发布于:2012-01-08 23:45
唔~~我的密码就是纯数字唉,貌似不太安全的说
|
|
|
19楼#
发布于:2012-01-09 00:14
表示.。无视盗号的说..给盗了找回来就是
|
|
20楼#
发布于:2012-01-09 02:09
MD5加密是做网页的基础- -
不加密是不负责的态度~ |
|
21楼#
发布于:2012-01-09 09:53
我喜欢明文~明文多美啊~~
|
|
|
22楼#
发布于:2012-01-09 18:27
唔~~感觉自己的密码不怎么安全啊。不过话说要是有木马的话是不是在密码复杂也是会被盗了。
表示纯数字压力很大,各种密码都是纯数字= = |
|
|
23楼#
发布于:2012-01-10 00:16
不愧是大扣呢,密码学的一部分知识搬上来了呢,我呢只会简简单单的MD5码的一些原理和编程,其他都很水货了
|
|
24楼#
发布于:2012-01-10 08:38
不换密码的路过
|
|
25楼#
发布于:2012-01-10 14:34
密码同样很简单的鹿过。
= = |
|