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.
tools-js-demo/README.md

1.9 KiB

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)
}