1.先安装sm3的依赖和引入
npm install --save sm-crypto
import 'jsbn'
import { sm3 } from 'sm-crypto'
2.排序方法
export function objKeySort(obj) { // 排序的函数
var newkey = Object.keys(obj).sort()
// 先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
var newObj = {}// 创建一个新的对象,用于存放排好序的键值对
for (var i = 0; i < newkey.length; i++) { // 遍历newkey数组
newObj[newkey[i]] = obj[newkey[i]]// 向新创建的对象中按照排好的顺序依次增加键值对
}
return newObj// 返回排好序的新对象
}
3.获取随机数,为了区别数字0和字母大小写O移除掉,大写 i 和小写L也被移除掉
export function randomString(len) {
len = len || 32
const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678' /** **默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
const maxPos = $chars.length
let pwd = ''
for (let i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos))
}
return pwd
}
4.加密
// 拼接加密字符串并加密返回后的签名
export function generateSign (obj, randomStr) {
obj = objKeySort(obj)
const paramsJSONStr = JSON.stringify(obj)
const Str = paramsJSONStr.replaceAll(':', '').replaceAll(',', '').replaceAll('"', '').replace('{', '').replace('}', '')
console.log(randomStr)
if (randomStr) {
return sm3(Str + randomStr).toLocaleUpperCase()
} else {
return sm3(Str).toLocaleUpperCase()
}
}
5.也可以提供单独的加密方法
export function doSM3(text) {
return sm3(text).toLocaleUpperCase()
}