MD5密码算法(md5密码是什么)

2023-02-14 23:18:00 密语知识 思思

md5是什么 如何计算MD5

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的16进制数字串)。

大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为司法机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的MD5“数字指纹”,如果任何人对文件做了任何改动,其MD5也就是对应的“数字指纹”都会发生变化。

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

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

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

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

先回答你的问题:

你的担心是正确的,

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

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

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

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

————

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

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

MD5加密的过程有四步骤:

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

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

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

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

2.采用碰撞算法

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

三者缺一不可

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

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

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

但是回到题主担心的,

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

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

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

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

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

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

——

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

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

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

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

根本不可能。

安全性总结:

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

——

综上 MD5碰撞几个关注点

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

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

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

1.密码进行多次MD5加密

2.密码过滤不过视字符.

3.密码是定长的.例如:32个字符.用户不够的字符,用一固定字符如:空格补充.超长的.一律非法.

————

参考文章

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

【2】碰撞算法原理分析

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

【4】MD5碰撞

MD5密码算法(md5密码是什么) 第1张

C#MD5加密算法

MD5跟之前Rijndael算法差不多,不过在Web中传递数据应用很常见,安全性很高,它是一个不可逆的字符串变换算法,不过被山东大学的王小云教授破解了。然后再AB包里当做核对数据完整性。

看一看.Net官网怎么写的,官方是创建32个字节的十六进制格式的哈希字符串,然后我又稍加修改

测试

再加上一条

个人想法可能是这个套路使用MD5码,因为他是唯一的无法反转,然后注册时候服务器只存这个被MD5码处理后的密码,然后每次登录都用MD5码处理然后再服务器校对,这样可以保证的是公司不知道玩家的密码,但是可以去验证,保证了玩家的密码数据安全。

md5算法的特点

md5算法的特点如下:

1、长度固定。无论输入多少字节的信息,输出的字节总是16字节。

2、结果不可逆。从结果无法反推原始数据,因为无论输入的信息是多少字节,输出总是16字节。

3、高度离散性

输出的16个字节数据,没有任何规律可言。假如两次的输入只改变一个位,输出的结果也完全不同。

4.抗碰撞性、两个不同的数据,想产生的MD5一致,是十分困难的。

MD5算法是怎么算的?

一个比较复杂的数学运算

Rivest在1989年开发出MD2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。后来,Rogier和Chauvaud发现如果忽略了检验将和MD2产生冲突。MD2算法加密后结果是唯一的-----即没有重复。

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

有兴趣的话,看下这个