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