一、简介
node-rsa 是一个用于在 Node.js 环境下进行 RSA 加密、解密、签名和验证的库。它提供了简单易用的 API,使得在 Node.js 中使用 RSA 加密算法变得更加方便。
以下是 node-rsa 的一些主要特点和功能:
- 支持 RSA 密钥生成:node-rsa 可以生成符合 RSA 标准的公钥和私钥对。你可以使用 NodeRSA 类的 generateKeyPair 方法生成密钥对。
- 加密和解密:使用 NodeRSA 实例的 encrypt 方法可以对数据进行 RSA 加密,使用 decrypt 方法可以对加密数据进行解密。
- 签名和验证:node-rsa 提供了 sign 方法用于对数据进行签名,以及 verify 方法用于验证签名的有效性。
- 支持多种摘要算法:你可以选择不同的摘要算法(如 SHA-1、SHA-256 等)来计算数据的摘要,并进行签名和验证。
- 密钥导入和导出:node-rsa 支持从字符串或缓冲区导入和导出 RSA 密钥。你可以使用 importKey 和 exportKey 方法来管理密钥的导入和导出。
- 支持 PKCS#1 和 PKCS#8 格式:node-rsa 支持导入和导出符合 PKCS#1 和 PKCS#8 标准的密钥格式。
7.提供其他功能:node-rsa 还提供了其他一些功能,如生成 PEM 格式的密钥、获取密钥的指纹等。
二、安装
npm install node-rsa
三、使用方法
const NodeRSA = require('node-rsa');
// 创建 RSA 实例
const key = new NodeRSA();
// 生成密钥对
const keyPair = key.generateKeyPair();
// 获取公钥和私钥
const publicKey = keyPair.exportKey('public');
const privateKey = keyPair.exportKey('private');
console.log('公钥:',publicKey)
console.log('私钥:',privateKey)
// 要加密的数据
const plaintext = 'Hello, RSA!';
// 使用公钥加密数据
const encrypted = key.encrypt(plaintext, 'base64');
// 使用私钥解密数据
const decrypted = key.decrypt(encrypted, 'utf8');
console.log('加密数据:', plaintext);
console.log('加密结果:', encrypted);
console.log('解密数据:', decrypted);
// 签名和验证示例
const data = 'Hello, RSA Signature!';
const signature = key.sign(data, 'base64', 'utf8');
console.log('签名:', signature);
// 验证签名
const isSignatureValid = key.verify(data, signature, 'utf8', 'base64');
console.log('验证签名:', isSignatureValid);
四、相关函数
- nodeRsa = new NodeRSA():创建RSA对象
- nodeRsa.generateKeyPair(bits, exp):生成 RSA 密钥对
- bits:密钥的位数
- exp:指定的指数。
- nodeRsa.sign(buffer, encoding, source_encoding):对给定的缓冲区数据进行签名。
- buffer:要签名的数据
- encoding:数据的编码格式
- source_encoding:源数据的编码格式。
- nodeRsa.verify(buffer, signature, source_encoding, signature_encoding):验证给定缓冲区数据的签名是否有效。
- buffer:要验证的数据
- signature:签名数据
- source_encoding:源数据的编码格式
- signature_encoding:签名数据的编码格式。
- nodeRsa.decrypt(buffer, encoding):解密给定的缓冲区数据
- buffer:要解密的数据
- encoding:解密后数据的编码格式。
- nodeRsa.encrypt(buffer, encoding, source_encoding):对给定的缓冲区数据进行加密。
- buffer:要加密的数据
- encoding:加密后数据的编码格式
- source_encoding:源数据的编码格式。
- nodeRsa.decryptPublic(buffer, encoding):使用公钥解密给定的缓冲区数据。
- buffer:要解密的数据
- encoding:解密后数据的编码格式。
- nodeRsa.encryptPrivate(buffer, encoding, source_encoding):使用私钥对给定的缓冲区数据进行加密。
- buffer:要加密的数据
- encoding:加密后数据的编码格式
- source_encoding:源数据的编码格式。
- nodeRsa.importKey(keyData, format):导入密钥
- keyData:密钥数据
- forma:密钥的格式。
- nodeRsa.exportKey(format):导出密钥。format 是要导出的密钥的格式。
- nodeRsa.getKeySize():获取密钥的位数。
- nodeRsa.getMaxMessageSize():获取加密操作的最大消息大小。
- nodeRsa.isEmpty(strict):检查密钥是否为空。strict 是一个布尔值,指定是否进行严格的检查。
- nodeRsa.isPrivate():检查密钥是否为私钥。
- nodeRsa.isPublic(strict):检查密钥是否为公钥。strict 是一个布尔值,指定是否进行严格的检查。
- nodeRsa.setOptions(options):设置选项参数。options 是一个包含选项的对象。