You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.9 KiB
67 lines
1.9 KiB
```js
|
|
import SHA1 from 'crypto-js/sha1'
|
|
import { sm4 } from 'miniprogram-sm-crypto'
|
|
|
|
// 接口签名
|
|
export const genSign = params => {
|
|
// 获取预先设置为环境变量的 APPKEY
|
|
let key = '{your secreat-key}'
|
|
let keys = []
|
|
for (let key in params) {
|
|
keys.push(key)
|
|
}
|
|
// 参数名 ASCII 码从小到大排序(字典序)
|
|
keys.sort()
|
|
// 转成键值对
|
|
let paramPair = []
|
|
for (let i = 0, len = keys.length; i < len; i++) {
|
|
let k = keys[i]
|
|
let itm = params[k]
|
|
if (typeof itm == 'object') {
|
|
itm = JSON.stringify(itm)
|
|
}
|
|
paramPair.push(k + '=' + itm) // base64 编码
|
|
}
|
|
// 最后加上 key
|
|
paramPair.push('key=' + key)
|
|
// 拼接
|
|
let stringSignTemp = paramPair.join('&')
|
|
|
|
console.log('stringSignTemp:' + stringSignTemp)
|
|
let sign = SHA1(stringSignTemp).toString().toUpperCase()
|
|
|
|
return sign
|
|
}
|
|
|
|
// 数据解密
|
|
export const decodeData = data => {
|
|
//字符串转byte数组
|
|
const stringToByte = function (str) {
|
|
var bytes = new Array()
|
|
var len, c
|
|
len = str.length
|
|
for (var i = 0; i < len; i++) {
|
|
c = str.charCodeAt(i)
|
|
if (c >= 0x010000 && c <= 0x10ffff) {
|
|
bytes.push(((c >> 18) & 0x07) | 0xf0)
|
|
bytes.push(((c >> 12) & 0x3f) | 0x80)
|
|
bytes.push(((c >> 6) & 0x3f) | 0x80)
|
|
bytes.push((c & 0x3f) | 0x80)
|
|
} else if (c >= 0x000800 && c <= 0x00ffff) {
|
|
bytes.push(((c >> 12) & 0x0f) | 0xe0)
|
|
bytes.push(((c >> 6) & 0x3f) | 0x80)
|
|
bytes.push((c & 0x3f) | 0x80)
|
|
} else if (c >= 0x000080 && c <= 0x0007ff) {
|
|
bytes.push(((c >> 6) & 0x1f) | 0xc0)
|
|
bytes.push((c & 0x3f) | 0x80)
|
|
} else {
|
|
bytes.push(c & 0xff)
|
|
}
|
|
}
|
|
return bytes
|
|
}
|
|
const key = stringToByte('{your secreat-key1}')
|
|
return sm4.decrypt(data, key)
|
|
}
|
|
|
|
``` |