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

一、简介

JSEncrypt 是一个用于在浏览器中进行RSA加密和解密的 JavaScript 库。它提供了一种简单的方式来生成 RSA 密钥对、加密数据并使用私钥解密数据。
以下是 JSEncrypt 模块的一些主要功能和用法:

  1. 生成密钥对:使用 JSEncrypt,你可以轻松地生成 RSA 密钥对。你可以通过调用 new JSEncrypt() 创建一个 JSEncrypt 实例,然后使用 getKey() 方法生成密钥对。生成的密钥对包括公钥和私钥。
  2. 加密数据:一旦你有了密钥对,你可以使用公钥对数据进行加密。使用 JSEncrypt 的 setPublicKey() 方法设置公钥,然后使用 encrypt() 方法对数据进行加密。加密后的数据可以通过网络传输或存储在数据库中。
  3. 解密数据:使用私钥可以对加密的数据进行解密。使用 JSEncrypt 的 setPrivateKey() 方法设置私钥,然后使用 decrypt() 方法对加密的数据进行解密。解密后的数据将恢复为原始的明文数据。
  4. 密钥格式:JSEncrypt 支持多种密钥格式,包括 PEM 和 DER。你可以使用 getKey() 方法获取生成的密钥对,并使用 getPrivateKey() 和 getPublicKey() 方法获取私钥和公钥的字符串表示。
  5. 密钥长度和算法:JSEncrypt 支持不同长度的密钥,包括 1024 位、2048 位和 4096 位。你可以根据需要选择适当的密钥长度。JSEncrypt 使用 RSA 算法进行加密和解密。
  6. 兼容性: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);

四、相关函数
  1. rsaEncrypt = new JSEncrypt():创建RSA加密对象
  2. rsaEncrypt.setPrivateKey(privkey):设置私钥。
  3. rsaEncrypt.setPublicKey(pubkey):设置公钥。
  4. rsaEncrypt.sign(str, digestMethod, digestName):使用私钥对字符串 str 进行签名,并返回签名结果。
  • str:加密字符串
  • digestMethod:是签名算法的名称,例如 “sha256”,
  • digestName:是摘要算法的名称,例如 “RSA-SHA256”。
  1. rsaEncrypt.verify(str, signature, digestMethod):使用公钥验证字符串 str 的签名是否与给定的 signature 匹配。digestMethod 是签名算法的名称。
  • str:加密字符串
  • digestMethod:是签名算法的名称,例如 “sha256”,
  • digestName:是摘要算法的名称,例如 “RSA-SHA256”。
  1. rsaEncrypt.decrypt(str):使用私钥解密字符串 str,并返回解密后的结果。
  2. rsaEncrypt.encrypt(str):使用公钥对字符串 str 进行加密,并返回加密后的结果。
  3. rsaEncrypt.setKey(key):设置密钥对(公钥和私钥),key 是包含公钥和私钥的对象。
  4. rsaEncrypt.getKey(cb):异步获取密钥对(公钥和私钥),并通过回调函数 cb 返回结果。
  5. rsaEncrypt.getPrivateKey():获取私钥。
  6. rsaEncrypt.getPrivateKeyB64():获取私钥的 Base64 编码字符串。
  7. rsaEncrypt.getPublicKey():获取公钥。
  8. rsaEncrypt.getPublicKeyB64():获取公钥的 Base64 编码字符串。
  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
JSencrypt是一个用于前加密的JavaScript,而Node-rsa是一个用于后加密的Node.js模块。它们都是基于RSA算法实现的加密工具。下面是它们的介绍和使用方法: 1. JSencrypt的介绍和使用方法: JSencrypt是一个用于前加密的JavaScript,它可以使用RSA算法对数据进行加密和解密。使用JSencrypt可以保证数据在传输过程中的安全性。下面是JSencrypt的使用方法: (1)安装JSencrypt 可以通过npm安装JSencrypt,命令如下: ``` npm install jsencrypt ``` (2)使用JSencrypt进行加密和解密 下面是使用JSencrypt进行加密和解密的示例代码: ```javascript // 导入JSencrypt import JSEncrypt from 'jsencrypt' // 创建加密对象 const encryptor = new JSEncrypt() // 设置公钥 encryptor.setPublicKey('-----BEGIN PUBLIC KEY-----\n' + 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfZzJZzvJ5zJ8z7zJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzj\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJzjJ\n' + 'zjJzjJzjJzjJzjJzjJzjJzj
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值