当前位置:首页 > JavaScript

js rsa 实现

2026-02-02 01:22:49JavaScript

RSA 加密算法实现

RSA 是一种非对称加密算法,广泛应用于数据加密和数字签名。以下是使用 JavaScript 实现 RSA 加密和解密的步骤。

生成 RSA 密钥对

使用 crypto.subtle.generateKey 方法生成 RSA 密钥对。密钥对包括公钥和私钥,公钥用于加密,私钥用于解密。

async function generateKeyPair() {
  const keyPair = await window.crypto.subtle.generateKey(
    {
      name: "RSA-OAEP",
      modulusLength: 2048,
      publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
      hash: "SHA-256",
    },
    true,
    ["encrypt", "decrypt"]
  );
  return keyPair;
}

加密数据

使用公钥加密数据。加密前需要将明文转换为 ArrayBufferUint8Array

async function encryptData(publicKey, data) {
  const encodedData = new TextEncoder().encode(data);
  const encryptedData = await window.crypto.subtle.encrypt(
    {
      name: "RSA-OAEP",
    },
    publicKey,
    encodedData
  );
  return encryptedData;
}

解密数据

使用私钥解密数据。解密后需要将 ArrayBuffer 转换为可读的字符串。

async function decryptData(privateKey, encryptedData) {
  const decryptedData = await window.crypto.subtle.decrypt(
    {
      name: "RSA-OAEP",
    },
    privateKey,
    encryptedData
  );
  const decodedData = new TextDecoder().decode(decryptedData);
  return decodedData;
}

示例代码

以下是一个完整的示例,演示如何生成密钥对、加密和解密数据。

js rsa 实现

async function runExample() {
  // 生成密钥对
  const keyPair = await generateKeyPair();

  // 明文数据
  const plaintext = "Hello, RSA!";

  // 加密
  const encryptedData = await encryptData(keyPair.publicKey, plaintext);
  console.log("Encrypted data:", encryptedData);

  // 解密
  const decryptedText = await decryptData(keyPair.privateKey, encryptedData);
  console.log("Decrypted text:", decryptedText);
}

runExample().catch(console.error);

注意事项

  • RSA 加密通常用于加密少量数据(如对称密钥),不适合直接加密大文件。
  • 密钥长度建议至少为 2048 位以确保安全性。
  • 浏览器环境中使用 crypto.subtle API,Node.js 中可以使用 crypto 模块。

通过以上方法,可以在 JavaScript 中实现 RSA 加密和解密功能。

标签: jsrsa
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…