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