




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
什么是MD51.什么是MD5 :MD5 就是 Message(消息,信息) digest(消化,摘要) algorithm(运算法则) 翻译成普通话就是 信息摘要算法。在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来2.md5是怎样进行加密的 这个要分步来讲 为了更好的明白 我们来举个例子来讲 如对一个字符串 string 进行加密 第一步 我们要把他转换成位 (MD5是对位进行操作), 现在假设 string 转换为 位后是 1010000101110101,接下来就要对这个字节串进行补位成比512的倍数(n倍)位少64位就成,补位的规则嘛就是在你的位后先补一个1 其它的补0 就成,那么补位后 这个串变成 10100000101110101 1(先补的那个1)0000.000(总共512-64位)这些完成后还要在其后面补上一个64位的数据 当然这个数据也是有规定的, 这个数据就是原字节串的长度(当然这个长度已被转换成了64位。至此,数据补完后这串正好是512的倍数 512 * N-64+64至此,前两步补位和补数据长度完成了,在一些初始化处理后,MD5以512位分组来处理输入文本,每一分组又划分为16个32位子分组。算法的输出由四个32位分组组成,将它们级联形成一个128位散列值。首先填充消息使其长度恰好为一个比512位的倍数仅小64位的数。填充方法是附一个1在消息后面,后接所要求的多个0,然后在其后附上64位的消息长度(填充前)。这两步的作用是使消息长度恰好是512位的整数倍(算法的其余部分要求如此),同时确保不同的消息在填充后不相同。四个32位变量初始化为:A=0x01234567B=0x89abcdefC=0xfedcba98D=0x76543210它们称为链接变量(chaining variable)接着进行算法的主循环,循环的次数是消息中512位消息分组的数目。将上面四个变量复制到别外的变量中:A到a,B到b,C到c,D到d。主循环有四轮(MD4只有三轮),每轮很相拟。第一轮进行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)=(X&Z)|(Y&(Z)H(X,Y,Z)=XYZI(X,Y,Z)=Y(X|(Z)(&是与,|是或,是非,是异或)这些函数是这样设计的:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。函数F是按逐位方式操作:如果X,那么Y,否则Z。函数H是逐位奇偶操作符。设Mj表示消息的第j个子分组(从0到15),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)这四轮(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)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)常数ti可以如下选择:在第i步中,ti是4294967296*abs(sin(i)的整数部分,i的单位是弧度。(2的32次方)所有这些完成之后,将A,B,C,D分别加上a,b,c,d。然后用下一分组数据继续运行算法,最后的输出是A,B,C和D的级联。/* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Copyright (C) Paul Johnston 1999 - 2000. * Updated by Greg Holt 2000 - 2001. * See .uk/site/legal.html for details. */var hex_chr = 0123456789abcdef;function rhex(num) str = ; for(j = 0; j (j * 8 + 4) & 0x0F) + hex_chr.charAt(num (j * 8) & 0x0F); return str;function str2blks_MD5(str) nblk = (str.length + 8) 6) + 1; blks = new Array(nblk * 16); for(i = 0; i nblk * 16; i+) blksi = 0; for(i = 0; i 2 |= str.charCodeAt(i) 2 |= 0x80 16) + (y 16) + (lsw 16); return (msw 16) | (lsw & 0xFFFF);function rol(num, cnt) return (num (32 - cnt);function cmn(q, a, b, x, s, t) return add(rol(add(add(a, q), add(x, t), s), b);function ff(a, b, c, d, x, s, t) return cmn(b & c) | (b) & d), a, b, x, s, t);function gg(a, b, c, d, x, s, t) return cmn(b & d) | (c & (d), a, b, x, s, t);function hh(a, b, c, d, x, s, t) return cmn(b c d, a, b, x, s, t);function ii(a, b, c, d, x, s, t) return cmn(c (b | (d), a, b, x, s, t);function MD5(str) x = str2blks_MD5(str); var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for(i = 0; i x.length; i += 16) var olda = a; var oldb = b; var oldc = c; var oldd = d; a = ff(a, b, c, d, xi+ 0, 7 , -680876936); d = ff(d, a, b, c, xi+ 1, 12, -389564586); c = ff(c, d, a, b, xi+ 2, 17, 606105819); b = ff(b, c, d, a, xi+ 3, 22, -1044525330); a = ff(a, b, c, d, xi+ 4, 7 , -176418897); d = ff(d, a, b, c, xi+ 5, 12, 1200080426); c = ff(c, d, a, b, xi+ 6, 17, -1473231341); b = ff(b, c, d, a, xi+ 7, 22, -45705983); a = ff(a, b, c, d, xi+ 8, 7 , 1770035416); d = ff(d, a, b, c, xi+ 9, 12, -1958414417); c = ff(c, d, a, b, xi+10, 17, -42063); b = ff(b, c, d, a, xi+11, 22, -1990404162); a = ff(a, b, c, d, xi+12, 7 , 1804603682); d = ff(d, a, b, c, xi+13, 12, -40341101); c = ff(c, d, a, b, xi+14, 17, -1502002290); b = ff(b, c, d, a, xi+15, 22, 1236535329); a = gg(a, b, c, d, xi+ 1, 5 , -165796510); d = gg(d, a, b, c, xi+ 6, 9 , -1069501632); c = gg(c, d, a, b, xi+11, 14, 643717713); b = gg(b, c, d, a, xi+ 0, 20, -373897302); a = gg(a, b, c, d, xi+ 5, 5 , -701558691); d = gg(d, a, b, c, xi+10, 9 , 38016083); c = gg(c, d, a, b, xi+15, 14, -660478335); b = gg(b, c, d, a, xi+ 4, 20, -405537848); a = gg(a, b, c, d, xi+ 9, 5 , 568446438); d = gg(d, a, b, c, xi+14, 9 , -1019803690); c = gg(c, d, a, b, xi+ 3, 14, -187363961); b = gg(b, c, d, a, xi+ 8, 20, 1163531501); a = gg(a, b, c, d, xi+13, 5 , -1444681467); d = gg(d, a, b, c, xi+ 2, 9 , -51403784); c = gg(c, d, a, b, xi+ 7, 14, 1735328473); b = gg(b, c, d, a, xi+12, 20, -1926607734); a = hh(a, b, c, d, xi+ 5, 4 , -378558); d = hh(d, a, b, c, xi+ 8, 11, -2022574463); c = hh(c, d, a, b, xi+11, 16, 1839030562); b = hh(b, c, d, a, xi+14, 23, -35309556); a = hh(a, b, c, d, xi+ 1, 4 , -1530992060); d = hh(d, a, b, c, xi+ 4, 11, 1272893353); c = hh(c, d, a, b, xi+ 7, 16, -155497632); b = hh(b, c, d, a, xi+10, 23, -1094730640); a = hh(a, b, c, d, xi+13, 4 , 681279174); d = hh(d, a, b, c, xi+ 0, 11, -358537222); c = hh(c, d, a, b, xi+ 3, 16, -722521979); b = hh(b, c, d, a, xi+ 6, 23, 76029189); a = hh(a, b, c, d, xi+ 9, 4 , -640364487); d = hh(d, a, b, c, xi+12, 11, -421815835); c = hh(c, d, a, b, xi+15, 16, 530742520); b = hh(b, c, d, a, xi+ 2, 23, -995338651); a = ii(a, b, c, d, xi+ 0, 6 , -198630844); d = ii(d, a, b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纪念马克思研讨课件
- 三方合作建房的合同书
- 生命教育后感750字(13篇)
- 小区绿地管理使用及维护协议
- 2025年网络安全工程师信息安全漏洞响应考试模拟试卷
- 2025年南宁事业单位招聘考试综合类公共基础知识真题模拟试卷
- 纪律与作风课件
- 纪委监委消防知识培训课件
- 钦州二模数学试卷
- 全国高考体育生数学试卷
- 癫痫所致精神障碍
- 卫生部手术分级目录(2023年1月份修订)
- 电荷及其守恒定律、库仑定律巩固练习
- YY 0666-2008针尖锋利度和强度试验方法
- JJF 1002-2010国家计量检定规程编写规则
- 小沈阳《四大才子》欢乐喜剧人台词
- 全套课件-水利工程管理信息技术
- 缝纫机线迹图示教学课件
- 2022年衡阳市南岳区社区工作者招聘笔试题库及答案解析
- 阀门解体检修及研磨(课堂PPT)
- T∕CVIA 41-2014 液晶电视屏主流尺寸规范
评论
0/150
提交评论