一、简介
JSEncrypt 是一个用于在浏览器中进行RSA加密和解密的 JavaScript 库。它提供了一种简单的方式来生成 RSA 密钥对、加密数据并使用私钥解密数据。
以下是 JSEncrypt 模块的一些主要功能和用法:
- 生成密钥对:使用 JSEncrypt,你可以轻松地生成 RSA 密钥对。你可以通过调用 new JSEncrypt() 创建一个 JSEncrypt 实例,然后使用 getKey() 方法生成密钥对。生成的密钥对包括公钥和私钥。
- 加密数据:一旦你有了密钥对,你可以使用公钥对数据进行加密。使用 JSEncrypt 的 setPublicKey() 方法设置公钥,然后使用 encrypt() 方法对数据进行加密。加密后的数据可以通过网络传输或存储在数据库中。
- 解密数据:使用私钥可以对加密的数据进行解密。使用 JSEncrypt 的 setPrivateKey() 方法设置私钥,然后使用 decrypt() 方法对加密的数据进行解密。解密后的数据将恢复为原始的明文数据。
- 密钥格式:JSEncrypt 支持多种密钥格式,包括 PEM 和 DER。你可以使用 getKey() 方法获取生成的密钥对,并使用 getPrivateKey() 和 getPublicKey() 方法获取私钥和公钥的字符串表示。
- 密钥长度和算法:JSEncrypt 支持不同长度的密钥,包括 1024 位、2048 位和 4096 位。你可以根据需要选择适当的密钥长度。JSEncrypt 使用 RSA 算法进行加密和解密。
- 兼容性:JSEncrypt 在大多数现代浏览器中都能正常工作,包括 Chrome、Firefox、Safari 和 Edge。它不需要任何其他依赖项,只需引入 JSEncrypt 库即可开始使用。
二、安装
npm install jsencrypt
三、使用方法
window = {}
const JSEncrypt = require('jsencrypt');
const { generateKeyPairSync } = require('crypto');
// 生成 RSA 密钥对
const { publicKey, privateKey } = generateKeyPairSync('rsa', {
modulusLength: 2048, // 密钥长度
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem'
}
});
console.log('公钥:', publicKey);
console.log('私钥:', privateKey);
// 使用生成的密钥对进行加密和解密操作
const encryptor = new JSEncrypt();
encryptor.setPublicKey(publicKey);
const plaintext = 'Hello, World!';
const encrypted = encryptor.encrypt(plaintext);
console.log('加密结果:', encrypted);
const decryptor = new JSEncrypt();
decryptor.setPrivateKey(privateKey);
const decrypted = decryptor.decrypt(encrypted);
console.log('解密结果:', decrypted);
四、相关函数
- rsaEncrypt = new JSEncrypt():创建RSA加密对象
- rsaEncrypt.setPrivateKey(privkey):设置私钥。
- rsaEncrypt.setPublicKey(pubkey):设置公钥。
- rsaEncrypt.sign(str, digestMethod, digestName):使用私钥对字符串 str 进行签名,并返回签名结果。
- str:加密字符串
- digestMethod:是签名算法的名称,例如 “sha256”,
- digestName:是摘要算法的名称,例如 “RSA-SHA256”。
- rsaEncrypt.verify(str, signature, digestMethod):使用公钥验证字符串 str 的签名是否与给定的 signature 匹配。digestMethod 是签名算法的名称。
- str:加密字符串
- digestMethod:是签名算法的名称,例如 “sha256”,
- digestName:是摘要算法的名称,例如 “RSA-SHA256”。
- rsaEncrypt.decrypt(str):使用私钥解密字符串 str,并返回解密后的结果。
- rsaEncrypt.encrypt(str):使用公钥对字符串 str 进行加密,并返回加密后的结果。
- rsaEncrypt.setKey(key):设置密钥对(公钥和私钥),key 是包含公钥和私钥的对象。
- rsaEncrypt.getKey(cb):异步获取密钥对(公钥和私钥),并通过回调函数 cb 返回结果。
- rsaEncrypt.getPrivateKey():获取私钥。
- rsaEncrypt.getPrivateKeyB64():获取私钥的 Base64 编码字符串。
- rsaEncrypt.getPublicKey():获取公钥。
- rsaEncrypt.getPublicKeyB64():获取公钥的 Base64 编码字符串。