nodejs之JSEncrypt模块,浏览器端非对称加密RSA算法库

局外人LZ 2024-07-01 12:35:02 阅读 68

一、简介

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 编码字符串。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。