现在的位置: 首页 > 综合 > 正文

对MD5的一些研究和发现

2017年06月08日 ⁄ 综合 ⁄ 共 1000字 ⁄ 字号 评论关闭

可以说我接触的第一个密码算法就是MD5了,对其也有一些自己的理解,一些发现。

一、理论MD5碰撞

我们一般看到的MD5值都是16位或者32位的,不管怎么说,MD5值所能表示的数值是有限的。

那么,当字符的长度不断增长,MD5值就可能出现重复

MD5(str1)= MD5(str2)

二、字符加长应对MD5破解

可能很多人都知道,MD5是单向哈希函数,但它也是一一对应的。

所以现在有很多站点都提供了大字典,对MD5进行反向查询。

作为一个web开发者,他的用户也许喜欢123、123456、88888888之类的密码,也就是我们说的弱密码(专业点叫弱口令)。

如果你的设置中不允许他们使用这类密码,他们就会表示很反感,表示密码难记。

那么,我们就可以考虑使用字符串加长来应对用户的需求,同时对抗入侵者的破解。

用户注册账号时:密码  123456 ->  blog.csdn.net123456  ->   md5 (blog.csdn.net123456) -> AD0C137D4F131FC25EB5ECDF8B068E18 ->存储进数据库

用户登录:    用户输入密码123456 -> 脚本语言加入字符串  blog.csdn.net  -> 变成 blog.csdn.net123456   -> md5 运算并与数据库中的值进行比对。

这样来说:黑客如果拿下了数据库,对数据库中的字符进行crack 的时候,得到的是blog.csdn.net123456 这个值,而不是用户登录的值。

对暴力破解MD5有一定的意义。

小结:使用MD5越来越不安全了,密码长度的增长加重了人们的负担。

三、MD5值截取

这个是前段时间进行sql injection 的时候发现的,做法很简单。

一般的MD5是16位或者32位。

那么,我们字符MD5结果的32位进行截取,比如

MD5(admin)= 21232f297a57a5a743894a0e4a801fc3

16位:7a57a5a743894a0e

那么,我们为什么要按照16位的规则来截取呢,我从第一位开始截取,截取16个字符不行么?

进一步:我为什么一定要截取16位呢,我截取12位不行么?实在不行,我从第三位开始,截取20位总行了吧。

四、MD5 二次加密

这个就不用多说了吧,注册进行存储的时候进行两次MD5运算。

同样,验证的时候也进行MD5两次运算。

总结:关注信息安全,关注网络生活,希望大家开开心心过好每一天,别被这些破事搞坏心情。

抱歉!评论已关闭.