crypto-js的前端md5加密
现在的一个需求就是要前端这边做md5加密,本来想要用crypto,而crypto是node内置的模块,在npm查了一下,这个包已经没有了,所以改用crypto-js,这个还是很简单的。我们这边的md5的加密规则如下:将除了sign和appKey以外的,一级请求参数(不包含对象数组等)根据key值按照字母表的顺序(a~z)排序,将其对应参数值(仅value,不要key)拼接到一起,得到字符串...
·
现在的一个需求就是要前端这边做md5加密,本来想要用crypto,而crypto是node内置的模块,在npm查了一下,这个包已经没有了,所以改用crypto-js,这个还是很简单的。
我们这边的md5的加密规则如下:
- 将除了sign和appKey以外的,一级请求参数(不包含对象数组等)根据key值按照字母表的顺序(a~z)排序,将其对应参数值(仅value,不要key)拼接到一起,得到字符串A
- 拼接 appKey+A+appSecret ,得到字符串B
- 将字符串B 进行urlencode(utf-8)编码,结果转化为大写,得到字符串C。除了字符、数字、下划线全部编码
- 将字符串C 进行MD5编码,结果转化为大写,得到字符串D
所以可以将这些都写在一个js里面,然后引入就好了
// md5.js
/* eslint-disable */
import CryptoJS from 'crypto-js'
// md5 加密
const md5 = str => CryptoJS.MD5(str).toString().toUpperCase()
export const sign = (params, appKey, appSecret) => {
const obj = {}
let str = ''
for (const k in params) {
if (['sign', 'appKey'].includes(k) || k instanceof Array || k instanceof Object || params[k] === undefined) {
continue
}
obj[k] = params[k]
}
Object.keys(obj).sort().forEach(k => {
console.log(k, ': ', obj[k]);
str += obj[k]
})
str = encodeURI(`${ appKey }${ str }${ appSecret }`).toUpperCase()
console.log('str-------------->', str)
return md5(str);
}
// const params = {"restaurantId":"1106073","lat":31.298,"lng":121.448,"channel":"ele"};
// console.log(sign(params, '9381936516', 'D31ba58fd73C71db697ab5E4946D52F'));
用ES6的import 引入调用
// index.js
import { sign as getSign } from './md5'
const appKey = '888888888'
const appSecret = 'sdggdsgcdhdshdhfhhfhdhhhfvc'
const sign = getSign(postDatas, appKey, appSecret)
console.log('sign', sign)
关注一下公众号呀~
更多推荐
已为社区贡献1条内容
所有评论(0)