关于MD5加密算法密码验证问题

看了一些博客,都说一个MD5摘要可以对应多个原文,从而使得MD5加密算法变得不可逆,就因为这样,我想问一个问题:假如数据库中存着一个用户密码的MD5摘要,当用户登录时,需... 看了一些博客,都说一个MD5摘要可以对应多个原文,从而使得MD5加密算法变得不可逆,就因为这样,我想问一个问题:假如数据库中存着一个用户密码的MD5摘要,当用户登录时,需要将用户输入的密码转换为MD5摘要并与数据库中对应用户的MD5摘要进行比对,那么这样岂不是意味着用户输入了一个错误的密码而刚好这个错误密码的摘要恰好与数据库中的摘要匹配成功,这不就等于使用了错误密码但是登录成功了? 希望大神解惑。 展开
 我来答
走四方开心0DA
2017-10-20 · TA获得超过382个赞
知道小有建树答主
回答量:185
采纳率:77%
帮助的人:149万
展开全部

(恰恰我最近也在研究加密这块,

我们公司项目的RSA ASE MD5 SHA-1加密方案都是我写的。

直接拿我分享会上的稿子了)

先回答你的问题:

你的担心是正确的,

MD5加密的结果值A,是可以由两个不同的内容B和C得到的

即:期望的正确密码 a     a进行MD5加密的结果   0cc175b9c0f1b6a831c399e269772661

某人输入了错误的密码x,

x进行特殊的算法处理,是可以得到0cc175b9c0f1b6a831c399e269772661 这个MD5值的

————

但是你注意一点,错误的密码数据,必须是通过复杂算法得到,简单点称作“碰撞算法”。碰撞算法,其实可以看作是一种伪装算法,即,把错误的东西伪装成某个正确东西的MD5值。

至于“碰撞算法”的原理,可以从MD5加密的原理探知1、2,

MD5加密的过程有四步骤:

  1. 填充 2.初始化变量 3. 处理分组数据 4.输出结果

“碰撞算法”原理就是在前三步进行“大数据量样本的填充-试错-填充试错-直至得到期望的结果

破解过程中有三点是必须清晰的;

1.大量的正确密码的样本

2.采用碰撞算法

3.事先预知的,破解者期望的正确的结果

三者缺一不可

MD5“碰撞算法”的示例场景也是在 文件(比如数字签名)摘要加密上,

即,像密码学家演示的那样:

通过算法,可以得到相同MD5值的A和B  (A和B只是代指),这种算法2004年已经由中国的密码学家王小云实现。

但是回到题主担心的,

非法分子,事先并不知道  张无忌的账号——正确密码对应的MD5值,

他只能用“碰撞算法”去试,随便编一个假的密码,用“碰撞算法”去进行伪装填充-试错

但是试的过程就是无数次跟贵公司后台校验的过程,

在这个过程,贵公司后台应该做了用户当日最大错误密码次数处理。

所以理论上,不存在一个人,输入了错误的密码,登录成功的情况。

假设这个人每天能试5次,使用“碰撞算法”估计要算好几辈子了。

——

但是强调一下“MD5碰撞算法”的应用前提:

  1. 已知的明文以及明文对应的MD5值

  2. 根据1的条件,算法可以伪装出 另一个明文以及相同的MD5值

所以,不存在偶尔输错了一个密码,使用MD5加密,凑巧得到了正确密码的MD5值,这种情况不满足“碰撞算法”的条件和前提。

根本不可能。

安全性总结:

对于文件来说碰撞可能容易,但是对于限定长度的密码或者密文来说,MD5作为一种高性能高安全的数字签名算法来说,还是非常实用的

——

综上 MD5碰撞几个关注点

  1. 多数情况下,会产生不可视字符,而密码不可能存在不可视字符的.

  2. 生成"碰撞"的字符,能和你密码本身长度相等的.基本不可能.


基于上面两点.只要稍作点文章.就可以防止MD5碰撞了.

1.密码进行多次MD5加密
2.密码过滤不过视字符.
3.密码是定长的.例如:32个字符.用户不够的字符,用一固定字符如:空格补充.超长的.一律非法.

————

参考文章

【1】中国密码学家王小云2004年提交的破解MD5的算法

【2】碰撞算法原理分析

【3】产生MD5碰撞的新的充分条件集

【4】MD5碰撞

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式