js实现rsa
RSA 算法简介
RSA 是一种非对称加密算法,广泛应用于数据加密和数字签名。它基于大数分解的数学难题,使用公钥加密、私钥解密。
生成密钥对
在 JavaScript 中可以使用 crypto 模块生成 RSA 密钥对:
const { generateKeyPair } = require('crypto');
generateKeyPair('rsa', {
modulusLength: 2048,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem'
}
}, (err, publicKey, privateKey) => {
if (err) throw err;
console.log('Public Key:', publicKey);
console.log('Private Key:', privateKey);
});
加密数据
使用公钥加密数据:
const { publicEncrypt } = require('crypto');
const encryptedData = publicEncrypt(
publicKey,
Buffer.from('要加密的数据')
);
console.log('加密结果:', encryptedData.toString('base64'));
解密数据
使用私钥解密数据:
const { privateDecrypt } = require('crypto');
const decryptedData = privateDecrypt(
privateKey,
encryptedData
);
console.log('解密结果:', decryptedData.toString());
数字签名
使用私钥创建签名:
const { createSign } = require('crypto');
const sign = createSign('SHA256');
sign.update('要签名的数据');
const signature = sign.sign(privateKey, 'base64');
console.log('签名:', signature);
验证签名
使用公钥验证签名:
const { createVerify } = require('crypto');
const verify = createVerify('SHA256');
verify.update('要验证的数据');
const isValid = verify.verify(publicKey, signature, 'base64');
console.log('验证结果:', isValid);
注意事项
- 密钥长度建议至少 2048 位以保证安全性
- 确保私钥的安全存储,避免泄露
- 大文件加密建议使用对称加密,RSA 仅用于加密密钥
- 浏览器环境可能需要使用 WebCrypto API 或其他库如
jsencrypt







