作者:柯云,来自原文地址
背景:使用微信小程序调用https接口,md5加密当前时间戳,然后再md5(时间戳的md5+约定好的key)生成token,来实现简单校验。服务端接口,判断时间戳是否在有效时间内,然后生成token对比传过来的token。
微信小程序使用的开发语言是js,网上找到js实现md5加密的代码,融合进小程序内使用
在utils目录下新建md5.js文件
-
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,
|