MD5 算法

Posted hello-wei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MD5 算法相关的知识,希望对你有一定的参考价值。

因为要保证数据的完整一致性,采用了MD5算法。然后做一个简单的了解

一、MD5概念
MD5,全名Message Digest Algorithm 5 ,中文名为消息摘要算法第五版,
为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
上面这段话话引用自百度百科,MD5是一种信息摘要算法,主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要
压缩+加密+hash算法的结合体,是绝对不可逆的。


二、MD5计算步骤  
MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
第一步、填充
     如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。
     填充的方法是填充一个1和n个0。填充完后,信息的长度就为N*512+448(bit);


第二步、记录信息长度
     用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。


第三步、装入标准的幻数(四个整数)
     标准的幻数(物理顺序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。如果在程序中定义应该是(A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L)。有点晕哈,其实想一想就明白了。


第四步、四轮循环运算
     循环的次数是分组的个数(N+1)
   1)将每一512字节细分成16个小组,每个小组64位(8个字节)    
   2)先认识四个线性函数(&是与,|是或,~是非,^是异或)
   
   
三、MD5应用
1.密码
  可以当做密码验证,为了保证密码不在cmd5网站上破译,最好加盐及乱序,也可以只取一半md5的长度。md5是不可逆算法,只要保证算法不变,就能和数据库中的md5相匹配。

2.搜索
  以搜索为例,你输入“csdn 博客” 和 输入“博客 csdn”的结果是不一样的,因为你搜索的时候他们对应的md5是不一样的,他们可以根据这个md5去查询内容。

3.版权
  当一个视频或者音频创作出来的时候它的md5是唯一的,若以后有翻录等版本出来,即使画质,声音,文件名都一样,但是他们的md5验证是不一样的,所以可以验证版权。还比如用某一账户下载的视频它的账户信息也回和视频一起md5操作,如果以后这个人私自传播通过md5就可以去数据库中查找泄露版权的情况。

4.文件完整性的校验
  当下载一个文件时,服务器返回的信息中包括这个文件的md5,在本地下载完毕时进行md5,将两个md5值进行比较,如果一致则说明文件完整没有丢包现象。

5.文件上传
  文件上传时会上传文件的信息此时将文件的md5上传,服务器中存储这个md5值,并存储这个md5值所对应的已上传字节长度,比如未上传对应为0,已上传对应为-1,已上传200字节就对应200,这个上传的时候可以匹配到这个文件在服务器中的状态,方便做断点续传,只要源文件没有更改,即使换个名字,换个账户都可以在服务器找到对应的文件,所以当服务器中有已经上传完毕的此文件时,别人再上传这个文件就可以实现秒传。



四、说明
     对于MD5算法,不同的读取格式产生的字节流是不一样的,而且涉及计算可能需要数据格式转换,如把bit转换成一定的整型数据方便计算,因此,不同MD5算法实现版本算出的结果可能有很大不一样。
因此,我觉得最好多次计算的MD5算法版本一致。关于MD5算法,有一个比较好的在线计算工具,点击MD5在线计算器。
MD5算法是不可逆的,但是,基于键值对的字典关系原理,有一些收集海量MD5信息与摘要的数据库,采用枚举法能够从MD5值找到原文本信息,提供一个类似的工具,点击MD5在线破解。

 

以上是关于MD5 算法的主要内容,如果未能解决你的问题,请参考以下文章

MD5算法原理实现以及常用方法汇总

MD5算法如何解密

[MD5算法练习] MD5CrackMe算法分析

一起谈谈MD5加密算法

谁给我个md5等加密算法c++的现成类

MD5加密算法