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.
35 lines
902 B
35 lines
902 B
2 years ago
|
var crypto = require('crypto')
|
||
|
|
||
|
function WXBizDataCrypt(appId, sessionKey) {
|
||
|
this.appId = appId
|
||
|
this.sessionKey = sessionKey
|
||
|
}
|
||
|
|
||
|
WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
|
||
|
// base64 decode
|
||
|
var sessionKey = new Buffer(this.sessionKey, 'base64')
|
||
|
encryptedData = new Buffer(encryptedData, 'base64')
|
||
|
iv = new Buffer(iv, 'base64')
|
||
|
|
||
|
try {
|
||
|
// 解密
|
||
|
var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
|
||
|
// 设置自动 padding 为 true,删除填充补位
|
||
|
decipher.setAutoPadding(true)
|
||
|
var decoded = decipher.update(encryptedData, 'binary', 'utf8')
|
||
|
decoded += decipher.final('utf8')
|
||
|
|
||
|
decoded = JSON.parse(decoded)
|
||
|
|
||
|
} catch (err) {
|
||
|
throw new Error('Illegal Buffer')
|
||
|
}
|
||
|
|
||
|
if (decoded.watermark.appid !== this.appId) {
|
||
|
throw new Error('Illegal Buffer')
|
||
|
}
|
||
|
|
||
|
return decoded
|
||
|
}
|
||
|
|
||
|
module.exports = WXBizDataCrypt
|