首页 >后端开发 >php教程 >md5可以解密吗?

md5可以解密吗?

阿神
阿神原创
2017-03-14 22:47:3114649浏览

    接触过md5的人都知道,md5是不可以解密的,但是为什么网上还有很多网站声称可以破解MD5,本文就来讨论下这个问题。


    首先,的确如网上所说,md5有很多很多的破解版本,可以逆向破解,但,仅仅基于跑字典。所谓的跑字典也就是将一些常用的单词,词组的md5编码用来对比。注意!是“常用”!
如果有人不能理解常用是什么意思,我举个数学例子。
假设x=1的时候y=1,x=0的时候y=0.大家的第一反应这个函数是什么?y=x^n(n>0)or (y-0.5)^2+(x-0.5)^2=(0.5)^2
这就是常用函数。
那什么叫做不常用呢?还是上面那个条件:y=log2(x+1)
好吧,其实还是个常用函数= =,但编一个不常用的太麻烦了- -大家原谅我偷懒一下吧。
突然灵光一现,想到个不常用的函数:y=∫(上限1)(下限0)(8x^3+8x^2-16x)dx。


    来看一个例子:

    MD5以512位分组来处理输入的信息,其中每一分组又被划分为16个32位子分组,经过了一系列的处理之后,算法的输出有四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。在MD5算法中,首先需要对信息进行处理,使其字节长度对512求余为448。因此,信息的字节长度将被扩展至N*512+448,即N*64+56个字节,其中N为一个正整数。填充的方法如下,在信息的最后填充1个1,然后后面用0补足,直到满足条件。然后,在这个结果之后附加一个以64位二进制表示的填充前信息长度。经过这两步处理,信息的直接长度转变为N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做是为了满足后面处理中对信息长度的要求。

    MD5中有四个32位被称作连接变量的整数参数,它们分别为:

    A=0x01234567;

    B=0x89abcdef;

    C=0xfedcba98;

    D=0x76543210。

    还有4个处理位操作函数,它们分别为:

    F(X,Y,Z)=(X&Y)|((~X)&Z);

    G(X,Y,Z)=(X&Z)|(Y&(~Z));

    H(X,Y,Z)=X^Y^Z;

    I(X,Y,Z)=Y^(X|(~Z));

    其中,X,Y,Z分别代表任意32位整数。&是与运算,|是或运算,~是非运算,^是异或运算[4]。

    其具体步骤为:

    首先,将A复制到a变量,B复制到b变量,C复制到c变量,D复制到d变量。然后,进行四轮主循环,每一轮进行16次操作。每次操作对a,b,c,d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量、文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a,b,c,d中之一。


    通过上面的例子,我们可以清楚的知道,md5就是把不论什么长度的文字内容,给精简成128位散列数。不论文字内容只有一个字母a,还是1w多字的长篇论文,都精简(或填充)成128位散列数。这就造成了破解几乎成为了不可能。

    为什么这么说呢?还是刚刚那个例子,我告诉你结果“x=0,时y=0;x=1时y=1”但我不告诉(其实也没人会去统计文档里面有多少字符)你这是个什么函数,是log函数呢还是线性函数,亦或是高次函数?都不知道,请问,该怎么破解?

    而且,其实在加密领域,DES和RSA才是真正的加密,而MD5更多的用在文档校验上,用来生成密钥检测文档是否被篡改。

    看到这里,大家应该就很清楚了md5是不可以解密的


    另外再不错两个知识点:

1.所谓加密:

    加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。
加密技术包括两个元素:算法和算法是将普通的信息或者可以理解的信息与一串数字)结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解密的一种算法。在安全保密中,可通过适当的钥加密技术和管理机制来保证网络的信息通信安全。

2.所谓哈希:

Hash,一般翻译做"散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
简单的说就是一种将任意长度的消息压缩到某一固定长度的信息摘要的函数。
HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。
Hash算法在信息安全方面的应用主要体现在以下的3个方面:
1) 文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2) 数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3) 鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

相关文章:
php md5加密解密算法和工具(附代码)
php md5解密代码分享(附接口,亲测可用)
php md5加密可以破解吗?
MD5加密工具

以上是md5可以解密吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn