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[相 ...
 
随机推荐
- php json_encode转换中文乱码
			
$arr = ["a"=>'范德萨似懂非懂']; echo json_encode($arr,JSON_UNESCAPED_UNICODE);
 - AtCoder Regular Contest 082 (ARC082) E - ConvexScore 计算几何 计数
			
原文链接http://www.cnblogs.com/zhouzhendong/p/8934254.html 题目传送门 - ARC082 E 题意 给定二维平面上的$n$个点,定义全集为那$n$个点 ...
 - 给linux服务器添加一块新的磁盘
			
http://www.linuxidc.com/Linux/2011-02/31868.htm 把硬盘装好后,我们用 fdisk -l 查看下: 图中可以看出 /dev/sdb 是500G,新加的硬盘 ...
 - Practice| 数组
			
/* 从键盘确定班级的组号,在从键盘输入每一组的人数,并输入每一个学员的成绩,并求出,每一组的平均分, 全部的平均分,每一组的最高分,全部的最高分,并显示结果. */ class Test3{ pub ...
 - 实验3 敏捷开发与XP实践实验报告
			
一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:高君天 学号:20165319 指导教师:娄嘉鹏 实验日期:2018年4月27日 实验时间:13:45 - 3:25 实验序号:实验三 ...
 - day67 ORM模型之高阶用法整理,聚合,分组查询以及F和Q用法,附练习题整理
			
归纳总结的笔记: day67 ORM 特殊的语法 一个简单的语法 --翻译成--> SQL语句 语法: 1. 操作数据库表 创建表.删除表.修改表 2. 操作数据库行 增.删.改.查 怎么连数据 ...
 - Nowcoder contest 370F Rinne Loves Edges (简单树形DP) || 【最大流】(模板)
			
<题目链接> 题目大意: 一个 $n$ 个节点 $m$ 条边的无向连通图,每条边有一个边权 $w_i$.现在她想玩一个游戏:选取一个 “重要点” S,然后选择性删除一些边,使得原图中所有除 ...
 - HDU6397
			
HDU6397用小于n的m个数组成k,求方案数mod 998244353如果没有n的限制,直接用隔板法求就可以因为m个数中可以为0,所以不妨先都放上一个1,转化成不能为0的m个数来凑k+m,即C(k+ ...
 - Python import错误
			
今天将一个文件命名为select,在其中import了 A文件 再然后发现 B文件import A文件,会将select也一起运行. 还出现的问题是 A中的类实例的时候说找不到. 最后想到selec ...
 - 不一样的go语言-error
			
前言 go语言的error处理方式,在目前流行的编程语言中属于刺头.似乎天生就是用来有别于他人标记.TIOBE排行榜全十除了C语言,无一例外是try catch的阵营.而排在go之前的语言除了C与 ...