node-forge

2024-06-26 11:17:45 202
node-forge 是一个强大的 JavaScript 库,提供网络传输、加密、密码学、PKI、消息摘要等多种实现。它允许开发人员在客户端和服务端轻松处理安全通信和加密操作。

特点

  • 支持多种加密算法,如 AES、DES、RC2、RSA、SHA-1、SHA-256 等。
  • 提供 PKI 相关功能,包括生成证书请求 (CSR)、管理 X.509 证书和私钥。
  • 实现 TLS 协议,支持创建安全连接。
  • 提供 HTTP 客户端的实现,支持基于加密连接的网络通信。
  • 内置随机数生成器和实用工具函数。

使用场景

  • 在客户端和服务端之间建立安全通信。
  • 加密和解密敏感数据。
  • 生成和管理数字证书和密钥。
  • 实现基于 HTTP 的加密通信。
  • 验证和签名数据。

安装方式

通过 npm 安装:

npm install node-forge

或者使用 CDN:

<script src="https://cdn.jsdelivr.net/npm/node-forge/dist/forge.min.js"></script>

使用示例

以下是一个使用 node-forge 进行 RSA 加密和解密的示例:

const forge = require('node-forge');

// 生成 RSA 密钥对
const keypair = forge.pki.rsa.generateKeyPair(2048);
const publicKey = keypair.publicKey;
const privateKey = keypair.privateKey;

// 加密数据
const data = 'Hello, World!';
const encryptedData = publicKey.encrypt(data, 'RSA-OAEP');

// 解密数据
const decryptedData = privateKey.decrypt(encryptedData, 'RSA-OAEP');
console.log('Decrypted Data:', decryptedData);

常用 API 介绍

  • forge.pki.rsa.generateKeyPair(bits, e): 生成 RSA 密钥对。
  • forge.pki.publicKeyFromPem(pem): 从 PEM 格式的公钥字符串创建公钥对象。
  • forge.pki.privateKeyFromPem(pem): 从 PEM 格式的私钥字符串创建私钥对象。
  • forge.md.sha256.create(): 创建一个 SHA-256 摘要对象。
  • forge.util.encodeUtf8(str): 将字符串编码为 UTF-8 格式。
  • forge.util.decodeUtf8(bytes): 将字节数组解码为字符串。

高级用法

使用 PKI 功能生成和签署证书

node-forge 提供了全面的 PKI 功能,可以生成和管理证书。以下是一个生成自签名证书的示例:

const forge = require('node-forge');
const pki = forge.pki;

// 生成 RSA 密钥对
const keys = pki.rsa.generateKeyPair(2048);

// 创建证书
const cert = pki.createCertificate();
cert.publicKey = keys.publicKey;
cert.serialNumber = '01';
cert.validity.notBefore = new Date();
cert.validity.notAfter = new Date();
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1);

// 设置证书的 subject 和 issuer
const attrs = [{
  name: 'commonName',
  value: 'example.org'
}, {
  name: 'countryName',
  value: 'US'
}, {
  shortName: 'ST',
  value: 'Virginia'
}, {
  name: 'localityName',
  value: 'Blacksburg'
}, {
  name: 'organizationName',
  value: 'Test'
}, {
  shortName: 'OU',
  value: 'Test'
}];
cert.setSubject(attrs);
cert.setIssuer(attrs);

// 签名证书
cert.sign(keys.privateKey);

// PEM 格式的公钥、私钥和证书
const pemPrivateKey = pki.privateKeyToPem(keys.privateKey);
const pemPublicKey = pki.publicKeyToPem(keys.publicKey);
const pemCert = pki.certificateToPem(cert);

console.log('Private Key:', pemPrivateKey);
console.log('Public Key:', pemPublicKey);
console.log('Certificate:', pemCert);

这个示例展示了如何生成一个自签名的 X.509 证书,并输出 PEM 格式的公钥、私钥和证书。这些证书可以用于测试目的或本地开发环境中的安全通信。

官方资料

node-forge 是一个功能强大的库,提供了广泛的加密和网络功能,适用于各种安全通信和数据保护场景。