使用jsrsasign进行RSA加密解密
1. 生成密钥对
const { prvKeyObj, pubKeyObj } = jsrsasign.KEYUTIL.generateKeypair("RSA", 2048);
generateKeypair返回的是公钥对象和私钥对象
如果有公钥或私钥对象,获取公钥或私钥字符串内容
const publicKey = jsrsasign.KEYUTIL.getPEM(pubKeyObj);
const privateKey = jsrsasign.KEYUTIL.getPEM(prvKeyObj, "PKCS8PRV");
如果有公钥字符串或者私钥字符串,获取公钥或私钥对象
const publicKey = `
-----BEGIN PUBLIC KEY-----
公钥……
-----END PUBLIC KEY-----
`;const privateKey = `
-----BEGIN PRIVATE KEY-----
私钥……
-----END PRIVATE KEY-----
`;
const pubKeyObj = jsrsasign.KEYUTIL.getKey(publicKey);
const prvKeyObj = jsrsasign.KEYUTIL.getKey(privateKey);
2.使用公钥加密
password:加密内容
pubKeyObj:公钥对象
RSAOAEP:算法名称
const encrypted = jsrsasign.KJUR.crypto.Cipher.encrypt(password,pubKeyObj,"RSAOAEP"
);
3.使用私钥解密
encrypted:已加密的内容
prvKeyObj:私钥对象
RSAOAEP:算法名称
const decrypted = jsrsasign.KJUR.crypto.Cipher.decrypt(encrypted,prvKeyObj,"RSAOAEP"
);
4.jsrsasign移除了RSAOAEP算法
jsrsasign版本10支持RSAOAEP算法
jsrsasign在版本11后移除了对RSA and RSAOAEP的支持
https://kjur.github.io/jsrsasign/api/symbols/KJUR.crypto.Cipher.html#.encrypt
RSAOAEP算法使用pubKeyObj.encryptOAEP、prvKeyObj.decryptOAEP方法替代
const encrypted = pubKeyObj.encryptOAEP(password, "sha1");
const decrypted = prvKeyObj.decryptOAEP(encrypted, "sha1");
5.完整代码
const jsrsasign = require("jsrsasign");const { prvKeyObj, pubKeyObj } = jsrsasign.KEYUTIL.generateKeypair("RSA", 2048);const publicKey = jsrsasign.KEYUTIL.getPEM(pubKeyObj);
const privateKey = jsrsasign.KEYUTIL.getPEM(prvKeyObj, "PKCS8PRV");console.log("publicKey -> ", publicKey);
console.log("privateKey -> ", privateKey);const password = "123456";const encrypted = jsrsasign.KJUR.crypto.Cipher.encrypt(password,pubKeyObj,"RSAOAEP"
);console.log("encrypted -> ", encrypted);const decrypted = jsrsasign.KJUR.crypto.Cipher.decrypt(encrypted,prvKeyObj,"RSAOAEP"
);console.log("decrypted -> ", decrypted);