MD伍摘要算法简析w88优德官网电脑版

发布时间:2019-04-15  栏目:w88优德官网电脑版  评论:0 Comments

壹.肆.三 安全访问认证

  MD五还广泛用于操作系统的登录认证上,如Unix、各个BSD系统报到密码、数字签字等居多地方。如在Unix系统中用户的密码是以MD伍(或其余类似的算法)经Hash运算后存款和储蓄在文件系统中。当用户登六的时候,系统把用户输入的密码进行MD五Hash运算,然后再去和保存在文件系统中的MD伍值举办相比较,进而明确输入的密码是或不是正确。通过如此的手续,系统在并不知道用户密码的标价的情景下就能够规定用户登七种类的合法性。那足以免止用户的密码被抱有系统一管理理员权限的用户通晓。MD伍将随意长度的“字节串”映射为2个12八bit的大整数,并且是通过该12八bit反推原始字符串是困难的,换句话说便是,固然你看到源程序和算法描述,也无法将一个MD五的值调换回原来的字符串,从数学原理上说,是因为原本的字符串有无穷七个,那有点象不存在反函数的数学函数。所以,要碰着了md伍密码的主题材料,比较好的方法是:你能够用这一个种类中的md五()函数重新设1个密码,如admin,把变化的一串密码的Hash值覆盖原来的Hash值就行了。

MD5

  1995年,Rivest开荒出技术上尤为趋近成熟的md5算法。它在MD4的底子上增添了”安全-带子”(safety-belts)的概念。尽管MD伍比MD4复杂度大学一年级些,但却愈发安全。那么些算法很明显的由三个和MD四规划有些两样的步骤组成。在MD5算法中,音信-摘要的分寸和填充的须求条件与MD四完全同样。Den
boer和Bosselaers曾发现MD5算法中的假争论(pseudo-collisions),但除去就一直不任何被发现的加密后结果了。

参考:

  1、https://baike.baidu.com/item/MD5/212708?fr=aladdin#1_3

  2、http://hubingforever.blog.163.com/blog/static/171040579201210781650340/

 

 

 

一.三 MD五算法原理

  对于MD五算法能够简轻巧单的不外乎为:MD5是以511位分组来处理输入新闻,且每1分组又被分开为十七个32坐席分组,经过了壹雨后冬笋的处理后,算法的出口由多个三十三位分组组成,将那多少个三二拾贰位分组级联后将生成二个12十一位散列值。

  总体流程图如下:

  w88优德官网电脑版 1

 

1.1  概述

  MD5即Message-Digest Algorithm
伍(信息-摘要算法五),用于确认保证新闻传输完整一致。是Computer普遍接纳的杂凑算法之1(又译摘要算法哈希算法),主流编制程序语言广泛已有MD五落成。将数据(如汉字)运算为另一永久长度值,是杂凑算法的功底原理,MD伍的前身有MD二、MD3MD4

一.三.二 开首化变量

  初叶的1二二十人值为初试链接变量,那么些参数用于第二轮的运算,以多方字节序来代表,他们各自为:
A=0x012345陆7,B=0x89ABCDEF,C=0xFED中职篮玖捌,D=0x76543二十。

(每1个变量给出的数值是高字节存于内部存款和储蓄器低地址,低字节存于内部存款和储蓄器高地址,即大端字节序。在程序中变量A、B、C、D的值分别为0x6745230一,0xEFCDAB8九,0x98BADCFE,0x1032547陆)

1.3.4 输出

  最终的出口是a、b、c和d的级联。

  当你遵照我下边所说的主意完成MD5算法今后,你可以用以下几个音信对您做出来的顺序作2个差不多的测试,看看程序有未有不当。

  MD5 (“”) = d41d8cd98f00b204e9800998ecf8427e

  MD5 (“a”) = 0cc175b9c0f1b6a831c399e269772661

  MD5 (“abc”) = 900150983cd24fb0d6963f7d28e17f72

  MD5 (“message digest”) = f96b697d7cb7938d525a2f31aaf161d0

  MD5 (“abcdefghijklmnopqrstuvwxyz”) =
c3fcd3d76192e4007dfb496cca67e13b

  MD5 (“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”)
=f29939a25efabaef3b87e2cbfe641315

  MD5 (“8a683566bcc7801226b3d8b0cf35fd97”)
=cf2cb5c89c5e5eeebef4a76becddfcfd

1 MD5简介

1.5 MD5特点

  MD5算法具备以下特点:

  一、压缩性:任意长度的数额,算出的MD5值长度都以原则性的。

  二、轻便计算:从原数据总结出MD五值很轻巧。

  三、抗修改性:对原数据实行其余退换,哪怕只修改贰个字节,所获取的MD五值都有不小分别。

  4、强抗碰撞:已知原数据和其MD五值,想找到二个具备同样MD五值的数额(即伪造数据)是可怜不便的。

  MD⑤的作用是让大容积音信在用数字具名软件签署私人密钥前被”压缩“成壹种保密的格式(正是把3个Infiniti制长度的字节串转变来必然长的十陆进制数字串)。除了MD五以外,当中比较盛名的还有sha-1RIPEMD以及Haval等。

一.2  发展历史

一.四.2 数字签字

  MD5的优秀应用是对1段Message(字节串)产生fingerprint(指纹),以制止被“篡改”。举个例子,你将①段话写在多个叫
readme.txt文件中,并对这么些readme.txt产生三个MD伍的值并记录在案,然后你能够流传那些文件给旁人,外人假设改动了文件中的任何内容,你对这一个文件再一次总括MD伍时就会发觉(七个MD伍值不等同)。如若再有一个第一方的表达部门,用MD5还足以卫戍文件作者的“抵赖”,那就是所谓的数字签字应用。

一.四.一 壹致性验证

  MD5的第一名应用是对1段音讯(Message)发生音讯摘要(Message-Digest),避防范被曲解。比如,在Unix下有繁多软件在下载的时候都有二个文件名同样,文件扩充名称为.md伍的公文,在那么些文件中常见唯有1行文本,差不离结构如:

  MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515

  那正是tanajiya.tar.gz文件的数字具名。MD伍将全数文件作为1个大文本音讯,通过其不可逆的字符串调换算法,发生了那么些唯1的MD5新闻摘要。为了让读者朋友对MD5的运用有个直观的认识,小编以三个一旦和二个实例来总结描述一下其行事历程:  

  咱们都知道,地球上任何人都有谈得来无比的指纹,那常常造成司法活动鉴定分别罪犯身份最值得信任的方式;与之类似,MD伍就足感觉别的文件(不管其尺寸、格式、数量)发生1个同等独一无二的“数字指纹”,如若任何人对文本做了任何退换,其MD5值也等于应和的“数字指纹”都会发生变化。

  大家平常在好几软件下载站点的某软件消息中见到其MD伍值,它的坚守就在于大家得以在下载该软件后,对下载回来的文本用尤其的软件(如Windows
MD5Check等)做三回MD5校验,以管教我们得到的文本与该站点提供的公文为同一文件。

  具体来讲文件的MD伍值就好像这些文件的“数字指纹”。种种文件的MD5值是见仁见智的,假如任什么人对文本做了任何改换,其MD5值也正是呼应的“数字指纹”就会爆发变化。比如下载服务器针对二个文本预先提供一个MD伍值,用户下载完该文件后,用自家那几个算法重新总括下载文件的MD五值,通过相比那七个值是还是不是同样,就能料定下载的文书是还是不是出错,只怕说下载的文本是不是被篡改了。

  利用MD5算法来拓展文件校验的方案被大批量行使到软件下载站、论坛数据库、系统文件安全等方面。

二.2.1代码达成:

 1 /**
 2      * md5计算.
 3      * 
 4      * @param datas
 5      *            待计算的数据
 6      * @return 计算结果
 7      */
 8     public static byte[] md5(byte[] datas) {
 9         MessageDigest md = null;
10         try {
11             md = MessageDigest.getInstance("MD5");
12             md.reset();
13             md.update(datas);
14             return md.digest();
15         } catch (Exception e) {
16             LogUtil.writeErrorLog("MD5计算失败", e);
17             return null;
18         }
19     }

 

2 java代码完结MD5摘要算法

MD4

  为了巩固算法的安全性,Rivest在一玖9〇年又开辟出MD四算法。MD四算法一样供给补给消息以保险消息的比特位长度减去448后能被512整除(音讯比特位长度mod
512 =
448)。然后,二个以陆1六人二进制意味着的新闻的初期长度被增多进去。音讯被拍卖成5拾贰位damg?rd/merkle迭代结构的区块,而且各个区块要透过多个例外步骤的拍卖。Den
boer和Bosselaers以及其余人急忙的觉察了抨击MD四本子中率先步和第二步的漏洞。Dobbertin向大家演示了什么样利用一部普通的私人住房计算机在几分钟内找到MD四完好版本中的争辨(那一个争执实际上是1种漏洞,它将导致对差异的始末展开加密却大概取得一样的加密后结果)。毫无疑问,MD4就此被淘汰掉了。

  固然MD四算法在平安上有个这么大的漏洞,但它对在其后才被开拓出来的一点种音讯安全加密算法的出现却有着不行忽略的指导效应。

1.4 MD5应用

2.2.二  MessageDigest 简要说明

  java.security.MessageDigest类用于为应用程序提供消息摘要算法的功能,如 MD五 或
SHA 算法。轻易点说正是用于生成散列码。新闻摘就算平安的单向哈希函数,它接受任意大小的数码,输出固定长度的哈希值。关于消息摘要和散列码请参照《数字证书简单介绍

  MessageDigest 通过其getInstance体系静态函数来进展实例化和早先化。MessageDigest
对象通过采纳 update 方法处理数据。任何时候都足以调用 reset 方法重新设置摘要。壹旦有所要求革新的数目都早已被更新了,应该调用 digest 方法之一形成哈希计算并重回结果。

  对于给定数量的换代数据,digest 方法只好被调用3回。digest 方法被调用后,MessageDigest  对象被重复设置成其初叶状态。

  MessageDigest 的落实可随意选取是不是落实 Cloneable
接口。客户端应用程能够经过尝试复制和破获 CloneNotSupportedException
测试可复制性:

 

二.1 MD伍详细完结代码

  1 package xin.dreaming.md5;
  2 
  3 public class MD5 {
  4     /*
  5         *四个链接变量
  6         */
  7         private final int A=0x67452301;
  8         private final int B=0xefcdab89;
  9         private final int C=0x98badcfe;
 10         private final int D=0x10325476;
 11         /*
 12         *ABCD的临时变量
 13         */
 14         private int Atemp,Btemp,Ctemp,Dtemp;
 15          
 16         /*
 17         *常量ti
 18         *公式:floor(abs(sin(i+1))×(2pow32)
 19         */
 20         private final int K[]={
 21             0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,
 22             0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,0x698098d8,
 23             0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,
 24             0xa679438e,0x49b40821,0xf61e2562,0xc040b340,0x265e5a51,
 25             0xe9b6c7aa,0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,
 26             0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,0xa9e3e905,
 27             0xfcefa3f8,0x676f02d9,0x8d2a4c8a,0xfffa3942,0x8771f681,
 28             0x6d9d6122,0xfde5380c,0xa4beea44,0x4bdecfa9,0xf6bb4b60,
 29             0xbebfbc70,0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,
 30             0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,0xf4292244,
 31             0x432aff97,0xab9423a7,0xfc93a039,0x655b59c3,0x8f0ccc92,
 32             0xffeff47d,0x85845dd1,0x6fa87e4f,0xfe2ce6e0,0xa3014314,
 33             0x4e0811a1,0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391};
 34         /*
 35         *向左位移数,计算方法未知
 36         */
 37         private final int s[]={7,12,17,22,7,12,17,22,7,12,17,22,7,
 38             12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,
 39             4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,
 40             15,21,6,10,15,21,6,10,15,21,6,10,15,21};
 41          
 42          
 43         /*
 44         *初始化函数
 45         */
 46         private void init(){
 47             Atemp=A;
 48             Btemp=B;
 49             Ctemp=C;
 50             Dtemp=D;
 51         }
 52         /*
 53         *移动一定位数
 54         */
 55         private    int    shift(int a,int s){
 56             return(a<<s)|(a>>>(32-s));//右移的时候,高位一定要补零,而不是补充符号位
 57         }
 58         /*
 59         *主循环
 60         */
 61         private void MainLoop(int M[]){
 62             int F,g;
 63             int a=Atemp;
 64             int b=Btemp;
 65             int c=Ctemp;
 66             int d=Dtemp;
 67             for(int i = 0; i < 64; i ++){
 68                 if(i<16){
 69                     F=(b&c)|((~b)&d);
 70                     g=i;
 71                 }else if(i<32){
 72                     F=(d&b)|((~d)&c);
 73                     g=(5*i+1)%16;
 74                 }else if(i<48){
 75                     F=b^c^d;
 76                     g=(3*i+5)%16;
 77                 }else{
 78                     F=c^(b|(~d));
 79                     g=(7*i)%16;
 80                 }
 81                 int tmp=d;
 82                 d=c;
 83                 c=b;
 84                 b=b+shift(a+F+K[i]+M[g],s[i]);
 85                 a=tmp;
 86             }
 87             Atemp=a+Atemp;
 88             Btemp=b+Btemp;
 89             Ctemp=c+Ctemp;
 90             Dtemp=d+Dtemp;
 91          
 92         }
 93         /*
 94         *填充函数
 95         *处理后应满足bits≡448(mod512),字节就是bytes≡56(mode64)
 96         *填充方式为先加一个0,其它位补零
 97         *最后加上64位的原来长度
 98         */
 99         private int[] add(String str){
100             int num=((str.length()+8)/64)+1;//以512位,64个字节为一组
101             int strByte[]=new int[num*16];//64/4=16,所以有16个整数
102             for(int i=0;i<num*16;i++){//全部初始化0
103                 strByte[i]=0;
104             }
105             int    i;
106             for(i=0;i<str.length();i++){
107                 strByte[i>>2]|=str.charAt(i)<<((i%4)*8);//一个整数存储四个字节,小端序
108             }
109             strByte[i>>2]|=0x80<<((i%4)*8);//尾部添加1
110             /*
111             *添加原长度,长度指位的长度,所以要乘8,然后是小端序,所以放在倒数第二个,这里长度只用了32位
112             */
113             strByte[num*16-2]=str.length()*8;
114                 return strByte;
115         }
116         /*
117         *调用函数
118         */
119         public String getMD5(String source){
120             init();
121             int strByte[]=add(source);
122             for(int i=0;i<strByte.length/16;i++){
123             int num[]=new int[16];
124             for(int j=0;j<16;j++){
125                 num[j]=strByte[i*16+j];
126             }
127             MainLoop(num);
128             }
129             return changeHex(Atemp)+changeHex(Btemp)+changeHex(Ctemp)+changeHex(Dtemp);
130          
131         }
132         /*
133         *整数变成16进制字符串
134         */
135         private String changeHex(int a){
136             String str="";
137             for(int i=0;i<4;i++){
138                 str+=String.format("%2s", Integer.toHexString(((a>>i*8)%(1<<8))&0xff)).replace(' ', '0');
139      
140             }
141             return str;
142         }
143         /*
144         *单例
145         */
146         private static MD5 instance;
147         public static MD5 getInstance(){
148             if(instance==null){
149                 instance=new MD5();
150             }
151             return instance;
152         }
153          
154         private MD5(){};
155          
156         public static void main(String[] args){
157             String str=MD5.getInstance().getMD5("123");
158             System.out.println(str);
159         }
160 }

  代码摘要结果:

  w88优德官网电脑版 2

  此处代码能够参照前面MD伍原理流程,领会其代码实施流程。

2.贰 使用java.security.MessageDigest达成MD伍摘要算法

1.3.1 填充

  在MD伍算法中,首先需求对音讯进行填充,使其位长对51贰求余的结果万分44捌,并且填充必须开始展览,固然其位长对51二求余的结果特出44八。由此,新闻的位长(Bits
Length)将被扩展至N*51二+448,N为三个非负整数,N能够是零。

  填充的主意如下:

  一) 在信息的前边填充三个壹和许八个0,直到满意上面包车型地铁基准时才打住用0对音讯的填写。

  二) 在那一个结果前面附加贰个以陆拾2位贰进制表示的填写前音信长度(单位为Bit),假使二进制表示的填写前音讯长度超越63位,则取低陆拾三个人。

  经过那两步的处理,音信的位长=N*512+448+64=(N+1)*51二,即长度恰好是512的平头倍。那样做的原因是为满意前边处理中对音讯长度的渴求。

一.3.3 处理分组数据

  每1分组的算法流程如下:

  第一分组须要将上边三个链接变量复制到别的多个变量中:A到a,B到b,C到c,D到d。从第三分组伊始的变量为上1分组的演算结果,即A
= a, B = b, C = c, D = d。

主循环有肆轮(MD8头有三轮),每轮循环都很一般。第③轮进行拾伍遍操作。每一遍操作对a、b、c和d中的在这之中八个作二回非线性函数运算,然后将所得结果加上第七个变量,文本的叁个子分组和2个常数。再将所得结果向左环移三个骚乱的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。

  以下是每趟操作中用到的三个非线性函数(每轮二个)。

  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) )

  (&是与(And),|是或(Or),~是非(Not),^是异或(Xor))

  那八个函数的验证:如若X、Y和Z的应和位是单身和均匀的,那么结果的每1人也应是独自和均匀的。

  F是二个逐位运算的函数。即,要是X,那么Y,不然Z。函数H是逐位奇偶操作符。

  借使Mj代表音信的第j个子分组(从0到1伍),常数ti是4294967296*abs(
sin(i) )的平底部分,i 取值从一到6四,单位是弧度。(4294967296=23二)

  现定义:

  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)

  注意:“<<”表示循环左移位,不是左移位。

  这四轮(共64步)是:

  第一轮

  FF(a ,b ,c ,d ,M0 ,7 ,0xd76aa478 )

  FF(d ,a ,b ,c ,M1 ,12 ,0xe8c7b756 )

  FF(c ,d ,a ,b ,M2 ,17 ,0x242070db )

  FF(b ,c ,d ,a ,M3 ,22 ,0xc1bdceee )

  FF(a ,b ,c ,d ,M4 ,7 ,0xf57c0faf )

  FF(d ,a ,b ,c ,M5 ,12 ,0x4787c62a )

  FF(c ,d ,a ,b ,M6 ,17 ,0xa8304613 )

  FF(b ,c ,d ,a ,M7 ,22 ,0xfd469501)

  FF(a ,b ,c ,d ,M8 ,7 ,0x698098d8 )

  FF(d ,a ,b ,c ,M9 ,12 ,0x8b44f7af )

  FF(c ,d ,a ,b ,M10 ,17 ,0xffff5bb1 )

  FF(b ,c ,d ,a ,M11 ,22 ,0x895cd7be )

  FF(a ,b ,c ,d ,M12 ,7 ,0x6b901122 )

  FF(d ,a ,b ,c ,M13 ,12 ,0xfd987193 )

  FF(c ,d ,a ,b ,M14 ,17 ,0xa679438e )

  FF(b ,c ,d ,a ,M15 ,22 ,0x49b40821 )

  第二轮

  GG(a ,b ,c ,d ,M1 ,5 ,0xf61e2562 )

  GG(d ,a ,b ,c ,M6 ,9 ,0xc040b340 )

  GG(c ,d ,a ,b ,M11 ,14 ,0x265e5a51 )

  GG(b ,c ,d ,a ,M0 ,20 ,0xe9b6c7aa )

  GG(a ,b ,c ,d ,M5 ,5 ,0xd62f105d )

  GG(d ,a ,b ,c ,M10 ,9 ,0x02441453 )

  GG(c ,d ,a ,b ,M15 ,14 ,0xd8a1e681 )

  GG(b ,c ,d ,a ,M4 ,20 ,0xe7d3fbc8 )

  GG(a ,b ,c ,d ,M9 ,5 ,0x21e1cde6 )

  GG(d ,a ,b ,c ,M14 ,9 ,0xc33707d6 )

  GG(c ,d ,a ,b ,M3 ,14 ,0xf4d50d87 )

  GG(b ,c ,d ,a ,M8 ,20 ,0x455a14ed )

  GG(a ,b ,c ,d ,M13 ,5 ,0xa9e3e905 )

  GG(d ,a ,b ,c ,M2 ,9 ,0xfcefa3f8 )

  GG(c ,d ,a ,b ,M7 ,14 ,0x676f02d9 )

  GG(b ,c ,d ,a ,M12 ,20 ,0x8d2a4c8a )

  第三轮

  HH(a ,b ,c ,d ,M5 ,4 ,0xfffa3942 )

  HH(d ,a ,b ,c ,M8 ,11 ,0x8771f681 )

  HH(c ,d ,a ,b ,M11 ,16 ,0x6d9d6122 )

  HH(b ,c ,d ,a ,M14 ,23 ,0xfde5380c )

  HH(a ,b ,c ,d ,M1 ,4 ,0xa4beea44 )

  HH(d ,a ,b ,c ,M4 ,11 ,0x4bdecfa9 )

  HH(c ,d ,a ,b ,M7 ,16 ,0xf6bb4b60 )

  HH(b ,c ,d ,a ,M10 ,23 ,0xbebfbc70 )

  HH(a ,b ,c ,d ,M13 ,4 ,0x289b7ec6 )

  HH(d ,a ,b ,c ,M0 ,11 ,0xeaa127fa )

  HH(c ,d ,a ,b ,M3 ,16 ,0xd4ef3085 )

w88优德官网电脑版,  HH(b ,c ,d ,a ,M6 ,23 ,0x04881d05 )

  HH(a ,b ,c ,d ,M9 ,4 ,0xd9d4d039 )

  HH(d ,a ,b ,c ,M12 ,11 ,0xe6db99e5 )

  HH(c ,d ,a ,b ,M15 ,16 ,0x1fa27cf8 )

  HH(b ,c ,d ,a ,M2 ,23 ,0xc4ac5665 )

  第四轮

  II(a ,b ,c ,d ,M0 ,6 ,0xf4292244 )

  II(d ,a ,b ,c ,M7 ,10 ,0x432aff97 )

  II(c ,d ,a ,b ,M14 ,15 ,0xab9423a7 )

  II(b ,c ,d ,a ,M5 ,21 ,0xfc93a039 )

  II(a ,b ,c ,d ,M12 ,6 ,0x655b59c3 )

  II(d ,a ,b ,c ,M3 ,10 ,0x8f0ccc92 )

  II(c ,d ,a ,b ,M10 ,15 ,0xffeff47d )

  II(b ,c ,d ,a ,M1 ,21 ,0x85845dd1 )

  II(a ,b ,c ,d ,M8 ,6 ,0x6fa87e4f )

  II(d ,a ,b ,c ,M15 ,10 ,0xfe2ce6e0 )

  II(c ,d ,a ,b ,M6 ,15 ,0xa3014314 )

  II(b ,c ,d ,a ,M13 ,21 ,0x4e0811a1 )

  II(a ,b ,c ,d ,M4 ,6 ,0xf7537e82 )

  II(d ,a ,b ,c ,M11 ,10 ,0xbd3af235 )

  II(c ,d ,a ,b ,M2 ,15 ,0x2ad7d2bb )

  II(b ,c ,d ,a ,M9 ,21 ,0xeb86d391 )

  全部这几个成就之后,将a、b、c、d分别在原先基础上再加上A、B、C、D。

  即a = a + A,b = b + B,c = c + C,d = d + D

  然后用下一分组数据持续运维以上算法。

MD2

  Rivest在1990年支付出MD二算法。在那些算法中,首先对信息进行数量补位,使新闻的字节长度是1六的倍数。然后,以1个十三位的查看和充实到音信最终,并且根据那些新爆发的消息总结出散列值。后来,Rogier和Chauvaud发现只要忽视了查验将和MD二发出抵触。MD二算法加密后结果是唯壹的(即不一致音信加密后的结果不一致)。

留下评论