关于MD5:

MD5.js是通过前台js加密的方式对用户信息,密码等私密信息进行加密处理的工具,也可称为插件。

在本案例中 可以看到MD5共有6种加密方法:

1,  hex_md5(value)

2,  b64_md5(value)

3,  str_md5(value)

4,  hex_hmac_md5(key, data)

5,  b64_hmac_md5(key, data)

6,  str_hmac_md5(key, data)

下载地址:  点击下载

MD5.js 源代码如下 (若不想下载,可直接复制使用):

  1 /*
  2  * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
  3  * Digest Algorithm, as defined in RFC 1321.
  4  * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
  5  * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
  6  * Distributed under the BSD License
  7  * See http://pajhome.org.uk/crypt/md5 for more info.
  8  */
  9
 10 /*
 11  * Configurable variables. You may need to tweak these to be compatible with
 12  * the server-side, but the defaults work in most cases.
 13  */
 14 var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
 15 var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
 16 var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */
 17
 18 /*
 19  * These are the functions you'll usually want to call
 20  * They take string arguments and return either hex or base-64 encoded strings
 21  */
 22 function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
 23 function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
 24 function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
 25 function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
 26 function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
 27 function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
 28
 29 /*
 30  * Perform a simple self-test to see if the VM is working
 31  */
 32 function md5_vm_test()
 33 {
 34   return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
 35 }
 36
 37 /*
 38  * Calculate the MD5 of an array of little-endian words, and a bit length
 39  */
 40 function core_md5(x, len)
 41 {
 42   /* append padding */
 43   x[len >> 5] |= 0x80 << ((len) % 32);
 44   x[(((len + 64) >>> 9) << 4) + 14] = len;
 45
 46   var a =  1732584193;
 47   var b = -271733879;
 48   var c = -1732584194;
 49   var d =  271733878;
 50
 51   for(var i = 0; i < x.length; i += 16)
 52   {
 53     var olda = a;
 54     var oldb = b;
 55     var oldc = c;
 56     var oldd = d;
 57
 58     a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
 59     d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
 60     c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
 61     b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
 62     a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
 63     d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
 64     c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
 65     b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
 66     a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
 67     d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
 68     c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
 69     b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
 70     a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
 71     d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
 72     c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
 73     b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);
 74
 75     a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
 76     d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
 77     c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
 78     b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
 79     a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
 80     d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
 81     c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
 82     b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
 83     a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
 84     d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
 85     c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
 86     b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
 87     a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
 88     d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
 89     c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
 90     b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
 91
 92     a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
 93     d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
 94     c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
 95     b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
 96     a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
 97     d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
 98     c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
 99     b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
100     a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
101     d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
102     c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
103     b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
104     a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
105     d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
106     c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
107     b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
108
109     a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
110     d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
111     c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
112     b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
113     a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
114     d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
115     c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
116     b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
117     a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
118     d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
119     c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
120     b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
121     a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
122     d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
123     c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
124     b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
125
126     a = safe_add(a, olda);
127     b = safe_add(b, oldb);
128     c = safe_add(c, oldc);
129     d = safe_add(d, oldd);
130   }
131   return Array(a, b, c, d);
132
133 }
134
135 /*
136  * These functions implement the four basic operations the algorithm uses.
137  */
138 function md5_cmn(q, a, b, x, s, t)
139 {
140   return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
141 }
142 function md5_ff(a, b, c, d, x, s, t)
143 {
144   return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
145 }
146 function md5_gg(a, b, c, d, x, s, t)
147 {
148   return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
149 }
150 function md5_hh(a, b, c, d, x, s, t)
151 {
152   return md5_cmn(b ^ c ^ d, a, b, x, s, t);
153 }
154 function md5_ii(a, b, c, d, x, s, t)
155 {
156   return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
157 }
158
159 /*
160  * Calculate the HMAC-MD5, of a key and some data
161  */
162 function core_hmac_md5(key, data)
163 {
164   var bkey = str2binl(key);
165   if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
166
167   var ipad = Array(16), opad = Array(16);
168   for(var i = 0; i < 16; i++)
169   {
170     ipad[i] = bkey[i] ^ 0x36363636;
171     opad[i] = bkey[i] ^ 0x5C5C5C5C;
172   }
173
174   var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
175   return core_md5(opad.concat(hash), 512 + 128);
176 }
177
178 /*
179  * Add integers, wrapping at 2^32. This uses 16-bit operations internally
180  * to work around bugs in some JS interpreters.
181  */
182 function safe_add(x, y)
183 {
184   var lsw = (x & 0xFFFF) + (y & 0xFFFF);
185   var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
186   return (msw << 16) | (lsw & 0xFFFF);
187 }
188
189 /*
190  * Bitwise rotate a 32-bit number to the left.
191  */
192 function bit_rol(num, cnt)
193 {
194   return (num << cnt) | (num >>> (32 - cnt));
195 }
196
197 /*
198  * Convert a string to an array of little-endian words
199  * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
200  */
201 function str2binl(str)
202 {
203   var bin = Array();
204   var mask = (1 << chrsz) - 1;
205   for(var i = 0; i < str.length * chrsz; i += chrsz)
206     bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
207   return bin;
208 }
209
210 /*
211  * Convert an array of little-endian words to a string
212  */
213 function binl2str(bin)
214 {
215   var str = "";
216   var mask = (1 << chrsz) - 1;
217   for(var i = 0; i < bin.length * 32; i += chrsz)
218     str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
219   return str;
220 }
221
222 /*
223  * Convert an array of little-endian words to a hex string.
224  */
225 function binl2hex(binarray)
226 {
227   var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
228   var str = "";
229   for(var i = 0; i < binarray.length * 4; i++)
230   {
231     str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
232            hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
233   }
234   return str;
235 }
236
237 /*
238  * Convert an array of little-endian words to a base-64 string
239  */
240 function binl2b64(binarray)
241 {
242   var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
243   var str = "";
244   for(var i = 0; i < binarray.length * 4; i += 3)
245   {
246     var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
247                 | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
248                 |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
249     for(var j = 0; j < 4; j++)
250     {
251       if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
252       else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
253     }
254   }
255   return str;
256 }

MD5加密优缺点:

1,用js对私密信息加密可避免在网络中输入明文信息,被他人截取数据包而造成数据泄露。

2,避免缓存中自动缓存密码。比如在使用火狐浏览器登陆时,输入的用户名及密码自动缓存后,下次登陆无需输入密码就可实现登录,这样就给别人留下了漏洞,当别人使用你的电脑登陆那么你的密码就泄露了。使用js加密时,缓存的加密后的密文,用密文做密码登录是不成功的,即使泄露也是泄露的密文,对密码不会造成威胁。  缺点是: 每次登陆时都要手动输入密码,比较麻烦。

3,使用js加密,减少了服务器加密时的资源消耗,从理论上提高了服务器的性能。为了安全,很有必要在做服务端的加密,无论从理论还是实际,两道门比一道门要安全些,至少给攻击者造成了一个障碍。

使用详情:

    <script src="js/md5.js"></script><script>var code = "123456";var username = "123456";var password = "123456";var str1 = hex_md5("123456");var str2 = b64_md5("123456");var str3 = str_md5("123456");var str4 = hex_hmac_md5(code,code);var str5 = b64_hmac_md5(username,username);var str6 = str_hmac_md5(password,password);console.log(str1);            // e10adc3949ba59abbe56e057f20f883econsole.log(str2);            // 4QrcOUm6Wau+VuBX8g+IPgconsole.log(str3);            // áÜ9IºY«¾VàWò>console.log(str4);            // 30ce71a73bdd908c3955a90e8f7429efconsole.log(str5);            // MM5xpzvdkIw5VakOj3Qp7wconsole.log(str6);            // 0Îq§;Ý9U©t)ï</script>

转载于:https://www.cnblogs.com/CooLLYP/p/8628467.html

js MD5加密处理相关推荐

  1. js md5加密完整代码

    本人亲测有效,大家可以放心大胆用,有什么问题,直接联系博主! /** MD5* 加密 */function toMd5Hex(text) {var hexcase = 0;var chrsz = 8; ...

  2. js md5加密脚本

    1. MD5简介 MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value) ...

  3. 前台js MD5加密 后台 java MD5解密

    转载:https://my.oschina.net/qiaojj/blog/514575 记录一下 前端: // base64加密开始var keyStr = "ABCDEFGHIJKLMN ...

  4. C# js asp.net 字符串MD5加密GetMD5Hash

    杨中科老师 C# /// <summary>/// 把字符转换成MD5/// </summary>/// <param name="input"> ...

  5. md5加密 javaScript 微信小程序

    直接贴走md5.js,import md5 from './md5' 后,直接md5('xxx')即可.blueimp-md5 (v2.18.0) - JavaScript MD5 implement ...

  6. html调用js进行MD5加密,js实现md5加密

    [javascript]代码库 js实现md5加密 var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var ...

  7. php 易语言md5加密解密,详解易语言调用js实现md5加密方法

    易语言调用js需要用到拓展组件的脚本组件, 在窗口创建完毕的事件里给脚本组件初始化设置下脚本组件的语言属性,在这里以JScript为例: 脚本组件执行脚本的简单方法是:  脚本组件1.执行 ()  然 ...

  8. js 实现php md5加密,js实现md5加密插件代码分享

    本文主要和大家分享js实现md5加密插件代码,希望能帮助到大家.//使用方法: //引入文件 //var MD5=MD5.createMD5String(yourSrting):( function( ...

  9. 【js逆向】md5加密参数破解

    MD5 md5:消息摘要算法(英文:MD5 Message-Digest Algorithm ),一种被广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值.该加密算法不可逆,通过暴力穷举 ...

最新文章

  1. (11)Xamarin.iOS - 新增iPhone storyboard
  2. linux下的 ifconfig 和 ip 命令
  3. 恢复html的初始选定状态,Adobe Photoshop
  4. [PAT乙级]数字分类 (20)
  5. SPSS基础操作(二):用迭代法处理序列相关,并建立回归方程
  6. C语言中声明复数用什么字母,用c语言定义复数-20210407134457.docx-原创力文档
  7. 编译vuejs html,VueJs(2)---VueJs开发环境的搭建和讲解index.html如何被渲染
  8. LYNC 2010 安装指南和心得
  9. MyBatis如何返回自增的ID
  10. 全国软考中级软件设计师 学习笔记-数据结构及算法部分
  11. 生活随记 - 感恩老同学
  12. 中山大学3D游戏设计读书笔记 unity3D Note2
  13. 拉普拉斯矩阵(Laplacian matrix)的求解
  14. org.hibernate.QueryParameterException: could not locate named
  15. 12306订票候补是个坑_重磅!12306候补购票正式上线,实测你可能连排队的机会都没有!...
  16. 亲测有效,一招解决错误:This application failed to start because not Qt platform plugin could be initialized.
  17. 融合软泥怪 (优先队列)
  18. MaxEnt分析流程和推荐的分析内容
  19. Retrace AV推出新型涂料添加剂,可在30分钟内灭杀新冠病毒
  20. 虚拟机扩容、删除多余分区分配到C盘

热门文章

  1. 基于libmad库的MP3解码简析
  2. Newtonsoft.Json.dll 本地调用正常,服务器调用不正常
  3. 十一运夺金基础数据采集工具
  4. usaco Shaping Regions
  5. php 魔术变量和超级全局变量,PHP超级全局变量与魔术变量
  6. 基于mpi的奇偶排序_并行程序设计(第2版)pdf
  7. java 报文长度计算_从TcpClient.GetStream()读取而不知道长度 - java
  8. mongodb java 日志分析_记一次log4j与mongodb集成引发的问题分析
  9. 核爆rpg手机版_好嗨游戏:不玩吃亏 ,20款全世界最佳移动RPG角色扮演游戏(上)...
  10. java最全人名数组_java 里有两个方法 第一个方法定义一个数组 每个数组都是一个学生类 每个学生有姓名 学号 年龄...