进行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加密的更多相关文章

  1. Java生成MD5加密字符串代码实例

    这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下   (1)一般使用的数据库中都会保存用 ...

  2. Javascript实现MD5加密

    /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as d ...

  3. JavaScript的MD5加密

    1.首先要到http://pajhome.org.uk/crypt/md5/下载js文件. 2.在页面文件中添加: <script type="text/javascript" ...

  4. JavaScript关于md5加密

    /*中文加密 *181009 * */ function md5(string) { var x = Array(); var k, AA, BB, CC, DD, a, b, c, d; var S ...

  5. Android:MD5加密

    /** * @author gongchaobin * * MD5加密 * * @version 2013-8-22 */ public class MD5Util { // 用来将字节转换成 16 ...

  6. 对中文进行MD5加密的注意事项(Java版,编码问题)

    http://blog.csdn.net/tongdao/article/details/20690187 在工作中需要和第三方进行Http通信,在通信内容中有几个参数涉及到了中文.自己在进行MD5加 ...

  7. MD5加密以及登录获取设置token

    MD5简介 MD5是不可逆的加密算法,基本上是不可破解的,网上有些破解网站,其实是利用了穷举法,因为MD5生成的串是一样的,他们会将常规的密码生成MD5加密串,保存,然后破解的时候去穷举比对.(应对之 ...

  8. 【javascript类库】zepto和jquery的md5加密插件

    [javascript类库]zepto和jquery的md5加密插件 相信很多人对jQuery并不陌生,这款封装良好的插件被很多开发者使用. zepto可以说是jQuery在移动端的替代产品,它比jQ ...

  9. 一个简单的后台与数据库交互的登录与注册[sql注入处理,以及MD5加密]

    一.工具: vs2013[因为我现在用的也是2013,版本随便你自己开心] sql2008[准备过久升级] 二.用到的语言: HTML+CSS+Jquery+Ajax+sqlserver HTML[相 ...

随机推荐

  1. UOJ#207. 共价大爷游长沙 LCT

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ207.html 题解 第一次听说 LCT 还可以维护子树信息. 首先对于每一条路径 rand 一个值,分别 ...

  2. P1309 瑞士轮 排序选择 时间限制 归并排序

    题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分 ...

  3. Redis数据库 02事务| 持久化| 主从复制| 集群

    1. Redis事务 Redis不支持事务,此事务不是关系型数据库中的事务: Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的 ...

  4. Python中type和object

    type  所有类是type生成的 a = 1 b = "abc" print("type a:{}".format(type(a))) print(" ...

  5. day 39 mycql 数据库之约束

    egon笔记: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增 ...

  6. day12 函数的使用方法:初识迭代器和生成器

    生成器和迭代器比装饰器简单多了... 这是老师的博客地址: http://www.cnblogs.com/Eva-J/articles/7213953.html 前情回顾: #装饰器: # 在不修改一 ...

  7. Redis闪退解决办法

    复杂办法! cmd 进入命令,cd进入redis文件 输入:redis-server.exe redis.windows.conf,手动开启! 简单办法,删除重新下载! 不确定办法如下 1.在解压的r ...

  8. 20165220 Java第五周学习总结

    教材学习内容总结 1.try—catch语句:Java用try—catch语句来处理异常.将可能出现的异常操作放在try中,当try出现异常时,此部分立刻结束运行,转向执行catch部分.一个try- ...

  9. POJ 1056 IMMEDIATE DECODABILITY 【Trie树】

    <题目链接> 题目大意:给你几段只包含0,1的序列,判断这几段序列中,是否存在至少一段序列是另一段序列的前缀. 解题分析: Trie树水题,只需要在每次插入字符串,并且在Trie树上创建节 ...

  10. POJ 1330 Nearest Common Ancestors (模板题)【LCA】

    <题目链接> 题目大意: 给出一棵树,问任意两个点的最近公共祖先的编号. 解题分析:LCA模板题,下面用的是树上倍增求解. #include <iostream> #inclu ...