当前位置:首页 > 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实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…