加密思路
以查询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)
}