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;