JS 加密 解密

474 阅读1分钟

加密思路

以查询id=1001为例

  • 1:通过接口调用获得随机码:XXXX
  • 2:id参数与随机码拼接如:1001&XXXX
  • 3:将参数1001&XXXX用RSA加密,结果为:yyyy
  • 4:参数encode(yyyy),结果为:zzzz
  • 5: url编码之后,用%替换为%25,结果为:eeee
  • 6: 请求url:xxx.com/api/detail/…

代码实例:

// 安装node-forge库,并引入
import * as forge from 'node-forge' //rsa加密
// 获取当前的时间戳
async dataRsa(){
    const dateTime = Date.now()
    // 通过接口获取一个随机码
    let res = await getRandom(dateTime)
    let key = res.data.data
    let params = item
    let IdKey = params.concat('&',key)
    const pki = forge.pki
    var publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAILYMpzgCC8ZRcbr86NBRNpuoozTjqrQ2vHvgbYzt/ReidPeFj46c+JHzDJ2umQQOsjn2R60wAQdmKzafrzewScCAwEAAQ=='
    const publicK = pki.publicKeyFromPem('-----BEGIN PUBLIC KEY-----\n' + publicKey + '\n-----END PUBLIC KEY-----')
    const passwordCrypto = forge.util.encode64(publicK.encrypt(IdKey))
    function urlencode(str) {
        str = (str + '').toString()
        return encodeURIComponent(str)
          .replace(/!/g, '%21')
          .replace(/'/g, '%27')
          .replace(/\(/g, '%28')
          .replace(/\)/g, '%29')
          .replace(/\*/g, '%2A')
          .replace(/%20/g, '+')
      }
      return urlencode(passwordCrypto)  // 加密后的数据
}

// 解密
async getData(){
      let KayId = await this.dataRsa()
      const lastKayId = KayId.replace(new RegExp('%', 'g'), '%25')
      console.log('解密后的数据', lastKayId)
}