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就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。 我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
MD5的算法原理
MD5简介:
MD5是Message-digestAlgorithm5(信息-摘要算法)的缩写,经MD2、MD3和MD4发展而来。它是把一个任意长度的字节串变换成一定长的大整数。MD5算法是在MD4的基础上增加了“安全-带子”(safety-belts)的概念。虽然MD5比MD4稍微慢一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息摘要的大小和填充的必要条件与MD4完全相同。由于MD5算法的使用不需要支付任何版权费用,所以在一般的情况下MD5不失为一种非常优秀的中间技术。
MD5原理:
MD 5算法是对输入信息进行初始化处理后,以512位分组来处理输入的信息,每一分组又被划分
成为16个32位子分组,经过了一系列的变换处理后,输出由四个32位分组,再将这四个32位分组级
联后生成一个128位散列值。具体过程如下:
(1)首先对信息进行填充,即在信息的后面填充一个1和若干个0使其字节长度对512求余的结
果等于448。
(2)对MD 5进行初始化,即MD 5中用四个32位被称作链接变量的整数参数,它们分别为:A =
0x01234567,B = 0x89abcdef,C = 0xfedcba98,D =0x76543210。
(3)开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。将上面四个链
接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮,第一轮进行16次操作。
每次操作对a、b、c和d中的其中三个做一次非线性函数运算,然后将所得结果加上第四个变量,再将所得结果向右位移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。
以下是每次操作中用到的四个非线性函数(每轮一个)。
f(x,y,z)=(x&y) ((~x)&z)
g(x,y,z)=(xz) (y&(~z))
h(x,y,z)=x y z
i(x,y,z)=y (x (~z))
(其中:“&”是与运算,“ ”是或运算,“~”是非运算,“ ”是异或运算,它们都是位运算符。)
这四个函数的说明:如果x、y和z的对应位是独立和均匀的,那么结果的每一位也应是独立和均
匀的。f是一个逐位运算的函数。即,如果x,那么y,否则z。函数h是逐位奇偶操作符。假设mj表示
消息的第j个子分组(从0到15),ti为第I步中的常数,《 《 《s表示循环左移s位,
则四种操作为:ff(a,b,c,d,mj,s,ti)表示a=b+((a+(f(b,c,d)+mj+ti)《 《 《s)
gg(a,b,c,d,mj,s,ti)表示a=b+((a+(g(b,c,d)+mj+ti)《 《 《s)
hh(a,b,c,d,mj,s,ti)表示a=b+((a+(h(b,c,d)+mj+ti)《 《 《s)
ii(a,b,c,d,mj,s,ti)表示a=b+((a+(i(b,c,d)+mj+ti)《 《 《s)
常数ti表示在第i步中,ti是4294967296*abs(sin(i))的整数部分,4294967296等于2的32次
方,i的单位是弧度。所有这些完成之后,将A、B、C、D分别加上a、b、c、d。然后用下一分组
数据继续运行算法,最后的输出是A、B、C和D的级联。
MD5算法原理及实现
散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数,可以创建消息的“数字指纹”,消息接收方可以通过校验消息的哈希值来验证消息的完整性,防止消息被篡改。散列函数具有以下特性:
任何消息经过散列函数处理后,都会产生一个唯一的散列值,这个散列值可以用来验证消息的完整性。计算消息散列值的过程被称为“消息摘要”,计算消息散列值的算法被称为消息摘要算法。常使用的消息摘要算法有:MD—消息摘要算法,SHA—安全散列算法,MAC—消息认证码算法。本文主要来了解MD算法。
MD5算法是典型的消息摘要算法,它是由MD4,MD3和MD2算法演变而来。无论是哪一种MD算法,其原理都是接受一个任意长度的消息并产生一个128位的消息摘要。如果把得到的消息摘要转换成十六进制字符串,则会得到一个32字节长度的字符串,我们平常见到的大部分MD数字指纹就是一个长度为32的十六进制字符串。
假设原始消息长度是b(以bit为单位),注意这里b可以是任意长度,并不一定要是8的整数倍。计算该消息MD5值的过程如下:
在计算消息的MD5值之前,首先对原始信息进行填充,这里的信息填充分为两步。
第一步,对原始信息进行填充,填充之后,要求信息的长度对512取余等于448。填充的规则如下:假设原始信息长度为b bit,那么在信息的b+1 bit位填充1,剩余的位填充0,直到信息长度对512取余为448。这里有一点需要注意,如果原始信息长度对512取余正好等于448,这种情况仍然要进行填充,很明显,在这时我们要填充的信息长度是512位,直到信息长度对512取余再次等于448。所以,填充的位数最少为1,最大为512。
第二步,填充信息长度,我们需要把原始信息长度转换成以bit为单位,然后在第一步操作的结果后面填充64bit的数据表示原始信息长度。第一步对原始信息进行填充之后,信息长度对512取余结果为448,这里再填充64bit的长度信息,整个信息恰好可以被512整除。其实从后续过程可以看到,计算MD5时,是将信息分为若干个分组进行处理的,每个信息分组的长度是512bit。
在进行MD5值计算之前,我们先来做一些定义。
下面就是最核心的信息处理过程,计算MD5的过程实际上就是轮流处理每个信息分组的过程。
MD5算法实现如下所示。
这里也和Java提供的标准MD5算法进行了对比,通过测试可以看到该MD5计算的结果和Java标准MD5算法的计算结果是一样的。

更多文章:
win10不能用ghost恢复么(win10可以用ghost备份吗)
2026年9月9日 16:20
工行网银安全控件安装失败(mac 中国工商银行安全插件下载无法安装)
2026年9月9日 11:20
金币修改器无需root版(手机上的游戏,怎么让他以几倍速度进行,不需要root)
2026年9月9日 00:20





