nodejs版本DESede/CBC/PKCS5Padding算法封装(3des)
最近对接了一个第三方支付项目,用的加密算法是没听过的:DESede/CBC/PKCS5Padding
,
乖乖,这个算法真的是坑爹了,网上搜索了一堆只有java版本的,nodejs版本的各种问题,硬着头皮调了大半天,踩了N个坑,真的是无语了
talk is cheap,上代码
const crypto = require('crypto');
/**
* base64编码
* @param text
* @returns {Buffer}
*/
function base64(text) {
return Buffer.from(text, "base64");
};
/**
* 加密
*
* @param text
* @param secretKey
* @returns {string}
*/
function encode(text, secretKey) {
secretKey = base64(secretKey);
const cipher = crypto.createCipheriv('des-ede3-cbc', secretKey, Buffer.alloc(8));
const encrypted = cipher.update(text, 'utf8', 'base64');
return encrypted + cipher.final('base64');
};
/**
* 解密
* @param encryptedBase64
* @param secretKey
* @returns {string}
*/
function decode(encryptedBase64, secretKey) {
secretKey = base64(secretKey);
const decipher = crypto.createDecipheriv('des-ede3-cbc', secretKey, Buffer.alloc(8));
let decrypted = decipher.update(encryptedBase64, 'base64', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
};
我们来运行一下
//待加密josn
let json = `{"name":"chenqionghe","cn": "雪山飞猪","content": "no pain no gain, light weight baby"}`;
//密钥
let key = 'mdgIaBrQjIKU30IIEpZS1dsFNOLX73nQ';
//加密内容
let encrypted = encode(json, key);
console.log(encrypted);
//解密
console.log(decode(encrypted, key));
输出
EPvugsT71sqeIDPuVuP0mx+cotWTJ3BtVgmwj2aRWQCwiPfoB1/RKzErV/XFVWwbo00I7F9jpDqO6XxRHGO4yYWlSStS53AbJSSXOZy0Gszlx3MsHVfCLgQJ6uI2Czwn
{"name":"chenqionghe","cn": "雪山飞猪","content": "no pain no gain, light weight baby"}
以上内容为chenqionghe踩坑封装,感谢lidong童鞋的倾情演出,转载请申请地址