javascript 生成MD5加密
进行HTTP网络通信的时候,调用API向服务器请求数据,有时为了防止API调用过程中被黑客恶意篡改,所请求参数需要进行MD5算法计算,得到摘要签名。服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。
但是目前原生JS貌似并没有提供MD5计算相关的函数方法,只能自己实现或者使用前辈大神写好的。网上找了下,找到了这个MD5的javaScript实现https://www.bootcdn.cn/blueimp-md5/。
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script> <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
直接上类库代码
/*
* JavaScript MD5
* https://github.com/blueimp/JavaScript-MD5
*
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* https://opensource.org/licenses/MIT
*
* Based on
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/ /* global define */ ;
(function($)
{
'use strict' /*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safeAdd(x, y)
{
var lsw = (x & 0xffff) + (y & 0xffff)
var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
return (msw << 16) | (lsw & 0xffff)
} /*
* Bitwise rotate a 32-bit number to the left.
*/
function bitRotateLeft(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt))
} /*
* These functions implement the four basic operations the algorithm uses.
*/
function md5cmn(q, a, b, x, s, t)
{
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)
} function md5ff(a, b, c, d, x, s, t)
{
return md5cmn((b & c) | (~b & d), a, b, x, s, t)
} function md5gg(a, b, c, d, x, s, t)
{
return md5cmn((b & d) | (c & ~d), a, b, x, s, t)
} function md5hh(a, b, c, d, x, s, t)
{
return md5cmn(b ^ c ^ d, a, b, x, s, t)
} function md5ii(a, b, c, d, x, s, t)
{
return md5cmn(c ^ (b | ~d), a, b, x, s, t)
} /*
* Calculate the MD5 of an array of little-endian words, and a bit length.
*/
function binlMD5(x, len)
{
/* append padding */
x[len >> 5] |= 0x80 << (len % 32)
x[((len + 64) >>> 9 << 4) + 14] = len var i
var olda
var oldb
var oldc
var oldd
var a = 1732584193
var b = -271733879
var c = -1732584194
var d = 271733878 for (i = 0; i < x.length; i += 16)
{
olda = a
oldb = b
oldc = c
oldd = d a = md5ff(a, b, c, d, x[i], 7, - 680876936)
d = md5ff(d, a, b, c, x[i + 1], 12, - 389564586)
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)
b = md5ff(b, c, d, a, x[i + 3], 22, - 1044525330)
a = md5ff(a, b, c, d, x[i + 4], 7, - 176418897)
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)
c = md5ff(c, d, a, b, x[i + 6], 17, - 1473231341)
b = md5ff(b, c, d, a, x[i + 7], 22, - 45705983)
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)
d = md5ff(d, a, b, c, x[i + 9], 12, - 1958414417)
c = md5ff(c, d, a, b, x[i + 10], 17, - 42063)
b = md5ff(b, c, d, a, x[i + 11], 22, - 1990404162)
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)
d = md5ff(d, a, b, c, x[i + 13], 12, - 40341101)
c = md5ff(c, d, a, b, x[i + 14], 17, - 1502002290)
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329) a = md5gg(a, b, c, d, x[i + 1], 5, - 165796510)
d = md5gg(d, a, b, c, x[i + 6], 9, - 1069501632)
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)
b = md5gg(b, c, d, a, x[i], 20, - 373897302)
a = md5gg(a, b, c, d, x[i + 5], 5, - 701558691)
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)
c = md5gg(c, d, a, b, x[i + 15], 14, - 660478335)
b = md5gg(b, c, d, a, x[i + 4], 20, - 405537848)
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)
d = md5gg(d, a, b, c, x[i + 14], 9, - 1019803690)
c = md5gg(c, d, a, b, x[i + 3], 14, - 187363961)
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)
a = md5gg(a, b, c, d, x[i + 13], 5, - 1444681467)
d = md5gg(d, a, b, c, x[i + 2], 9, - 51403784)
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)
b = md5gg(b, c, d, a, x[i + 12], 20, - 1926607734) a = md5hh(a, b, c, d, x[i + 5], 4, - 378558)
d = md5hh(d, a, b, c, x[i + 8], 11, - 2022574463)
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)
b = md5hh(b, c, d, a, x[i + 14], 23, - 35309556)
a = md5hh(a, b, c, d, x[i + 1], 4, - 1530992060)
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)
c = md5hh(c, d, a, b, x[i + 7], 16, - 155497632)
b = md5hh(b, c, d, a, x[i + 10], 23, - 1094730640)
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)
d = md5hh(d, a, b, c, x[i], 11, - 358537222)
c = md5hh(c, d, a, b, x[i + 3], 16, - 722521979)
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)
a = md5hh(a, b, c, d, x[i + 9], 4, - 640364487)
d = md5hh(d, a, b, c, x[i + 12], 11, - 421815835)
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)
b = md5hh(b, c, d, a, x[i + 2], 23, - 995338651) a = md5ii(a, b, c, d, x[i], 6, - 198630844)
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)
c = md5ii(c, d, a, b, x[i + 14], 15, - 1416354905)
b = md5ii(b, c, d, a, x[i + 5], 21, - 57434055)
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)
d = md5ii(d, a, b, c, x[i + 3], 10, - 1894986606)
c = md5ii(c, d, a, b, x[i + 10], 15, - 1051523)
b = md5ii(b, c, d, a, x[i + 1], 21, - 2054922799)
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)
d = md5ii(d, a, b, c, x[i + 15], 10, - 30611744)
c = md5ii(c, d, a, b, x[i + 6], 15, - 1560198380)
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)
a = md5ii(a, b, c, d, x[i + 4], 6, - 145523070)
d = md5ii(d, a, b, c, x[i + 11], 10, - 1120210379)
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)
b = md5ii(b, c, d, a, x[i + 9], 21, - 343485551) a = safeAdd(a, olda)
b = safeAdd(b, oldb)
c = safeAdd(c, oldc)
d = safeAdd(d, oldd)
}
return [a, b, c, d]
} /*
* Convert an array of little-endian words to a string
*/
function binl2rstr(input)
{
var i
var output = ''
var length32 = input.length * 32
for (i = 0; i < length32; i += 8)
{
output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff)
}
return output
} /*
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*/
function rstr2binl(input)
{
var i
var output = []
output[(input.length >> 2) - 1] = undefined
for (i = 0; i < output.length; i += 1)
{
output[i] = 0
}
var length8 = input.length * 8
for (i = 0; i < length8; i += 8)
{
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32)
}
return output
} /*
* Calculate the MD5 of a raw string
*/
function rstrMD5(s)
{
return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))
} /*
* Calculate the HMAC-MD5, of a key and some data (raw strings)
*/
function rstrHMACMD5(key, data)
{
var i
var bkey = rstr2binl(key)
var ipad = []
var opad = []
var hash
ipad[15] = opad[15] = undefined
if (bkey.length > 16)
{
bkey = binlMD5(bkey, key.length * 8)
}
for (i = 0; i < 16; i += 1)
{
ipad[i] = bkey[i] ^ 0x36363636
opad[i] = bkey[i] ^ 0x5c5c5c5c
}
hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)
return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))
} /*
* Convert a raw string to a hex string
*/
function rstr2hex(input)
{
var hexTab = '0123456789abcdef'
var output = ''
var x
var i
for (i = 0; i < input.length; i += 1)
{
x = input.charCodeAt(i)
output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f)
}
return output
} /*
* Encode a string as utf-8
*/
function str2rstrUTF8(input)
{
return unescape(encodeURIComponent(input))
} /*
* Take string arguments and return either raw or hex encoded strings
*/
function rawMD5(s)
{
return rstrMD5(str2rstrUTF8(s))
} function hexMD5(s)
{
return rstr2hex(rawMD5(s))
} function rawHMACMD5(k, d)
{
return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))
} function hexHMACMD5(k, d)
{
return rstr2hex(rawHMACMD5(k, d))
} function md5(string, key, raw)
{
if (!key)
{
if (!raw)
{
return hexMD5(string)
}
return rawMD5(string)
}
if (!raw)
{
return hexHMACMD5(key, string)
}
return rawHMACMD5(key, string)
} if (typeof define === 'function' && define.amd)
{
define(function()
{
return md5
})
}
else if (typeof module === 'object' && module.exports)
{
module.exports = md5
}
else
{
$.md5 = md5
}
})(this)
在应用代码中,通过调用以字符串作为参数的MD5方法来计算字符串的MD5值,结果返回32位小写的十六进制值的字符串。
var v1= md5('{"name":"嘻嘻嘻嘻嘻嘻嘻嘻嘻","age":22}'); //56b21847ed32d2d96cf74077b22342eb
console.log(v1);
var v2= md5('{"name":"嘻嘻嘻嘻嘻嘻嘻嘻嘻"}');//80b36b8a15ece3158c4e30130d4d4453
console.log(v2);
如果这篇文章对您有帮助,您可以打赏我

技术交流QQ群:15129679
javascript 生成MD5加密的更多相关文章
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...
- Javascript实现MD5加密
/* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as d ...
- JavaScript的MD5加密
1.首先要到http://pajhome.org.uk/crypt/md5/下载js文件. 2.在页面文件中添加: <script type="text/javascript" ...
- JavaScript关于md5加密
/*中文加密 *181009 * */ function md5(string) { var x = Array(); var k, AA, BB, CC, DD, a, b, c, d; var S ...
- Android:MD5加密
/** * @author gongchaobin * * MD5加密 * * @version 2013-8-22 */ public class MD5Util { // 用来将字节转换成 16 ...
- 对中文进行MD5加密的注意事项(Java版,编码问题)
http://blog.csdn.net/tongdao/article/details/20690187 在工作中需要和第三方进行Http通信,在通信内容中有几个参数涉及到了中文.自己在进行MD5加 ...
- MD5加密以及登录获取设置token
MD5简介 MD5是不可逆的加密算法,基本上是不可破解的,网上有些破解网站,其实是利用了穷举法,因为MD5生成的串是一样的,他们会将常规的密码生成MD5加密串,保存,然后破解的时候去穷举比对.(应对之 ...
- 【javascript类库】zepto和jquery的md5加密插件
[javascript类库]zepto和jquery的md5加密插件 相信很多人对jQuery并不陌生,这款封装良好的插件被很多开发者使用. zepto可以说是jQuery在移动端的替代产品,它比jQ ...
- 一个简单的后台与数据库交互的登录与注册[sql注入处理,以及MD5加密]
一.工具: vs2013[因为我现在用的也是2013,版本随便你自己开心] sql2008[准备过久升级] 二.用到的语言: HTML+CSS+Jquery+Ajax+sqlserver HTML[相 ...
随机推荐
- 51Nod1863 Travel 主席树 最短路 Dijkstra 哈希
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1863.html 题目传送门 - 51Nod1863 题意 有 n 个城市,有 m 条双向路径连通它们 ...
- 不同路径(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?)
示例 1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角. 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -&g ...
- 20165319 2017-2018-2《Java程序设计》课程总结
一.每周作业链接汇总 预备作业一:我期望的师生关系 20165319 我所期望的师生关系 预备作业二:学习基础和C语言基础调查 20165319 学习基础和C语言基础调查 摘要: 技能学习经验 c语言 ...
- mini dc与简易计算器 20165235
mini dc 任务内容 本次mini dc任务就是通过补充代码来实现整型数据的后缀表达式计算 相关知识 通过利用堆栈这一先进后出的数据结构来实现后缀表达式的计算.通过Stack<Integer ...
- Python编程基础(一)
1.Python中的变量赋值不需要类型声明 2.等号(=)用来给变量赋值 3.字符串拼接用 “+” 号 temp=‘123’ print('temp的值是%s'%temp) #整数和字符创的转换, ...
- 环境变量误删path找回方法与mysql基础命令
环境变量误删path找回方法用户path:%USERPROFILE%\AppData\Local\Microsoft\WindowsAppsWin+R 输入regedit 打开注册表(开始-运行里输入 ...
- jquery模拟form表单提交并新打开页面
/** * form表单提交本页面打开 * @param url * @param params */ function postCurrent(url,params){ var form = $(& ...
- Leading and Trailing(巧妙利用log解决次方问题)
Sample Input 5 123456 1 123456 2 2 31 2 32 29 8751919 Sample Output Case 1: 123 456 Case 2: 152 936 ...
- Gym 102091L Largest Allowed Area 【二分+二维前缀和】
<题目链接> 题目大意:给你一个由01组成的矩形,现在问你,该矩形中,最多只含一个1的正方形的边长最长是多少. 解题分析: 用二维前缀和维护一下矩形的01值,便于后面直接$O(1)$查询任 ...
- 002.MySQL高可用主从复制部署
一 基础环境 主机名 系统版本 MySQL版本 主机IP master CentOS 6.8 MySQL 5.6 172.24.8.10 slave01 CentOS 6.8 MySQL 5.6 17 ...