对MD5的一些研究和发现

本文探讨了MD5密码算法的安全性问题,包括理论上的碰撞现象,通过字符加长应对MD5破解的策略,MD5值的截取技巧,以及通过二次加密增强安全性。在当前环境下,MD5已经显得不够安全,但通过上述方法能一定程度上提高安全性。

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



一、理论MD5碰撞

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

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

MD5(str1)= MD5(str2)


二、字符加长应对MD5破解

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

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


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

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

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

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

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


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

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


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


三、MD5值截取

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

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

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

MD5(admin)= 21232f297a57a5a743894a0e4a801fc3

16位:7a57a5a743894a0e

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

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


四、MD5 二次加密

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

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


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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值