当前位置:首页 > JavaScript

js实现简单rsa

2026-02-03 05:39:15JavaScript

RSA 算法基础概念

RSA 是一种非对称加密算法,基于大数分解的数学难题。核心步骤包括密钥生成、加密和解密。密钥分为公钥(用于加密)和私钥(用于解密)。

密钥生成步骤

  1. 选择两个大质数
    选取质数 pq(实际应用中需为非常大的质数,此处仅为演示):

    const p = 61;
    const q = 53;
  2. 计算模数 n
    n 是 RSA 算法的模数,也是公钥和私钥的一部分:

    js实现简单rsa

    const n = p * q; // 3233
  3. 计算欧拉函数 φ(n)
    φ(n) 表示小于 n 且与 n 互质的数的个数:

    const phi = (p - 1) * (q - 1); // 3120
  4. 选择公钥指数 e
    e 需满足 1 < e < φ(n) 且与 φ(n) 互质。通常选择 65537:

    js实现简单rsa

    const e = 17; // 常见值
  5. 计算私钥指数 d
    de 的模反元素,满足 (d * e) % φ(n) === 1。使用扩展欧几里得算法计算:

    function modInverse(e, phi) {
      let [a, b] = [e, phi];
      let [x0, x1] = [0, 1];
      while (a > 1) {
        const q = Math.floor(a / b);
        [a, b] = [b, a % b];
        [x0, x1] = [x1 - q * x0, x0];
      }
      return x1 < 0 ? x1 + phi : x1;
    }
    const d = modInverse(e, phi); // 2753

加密与解密实现

  1. 加密函数
    使用公钥 (e, n) 加密消息 m(需满足 m < n):

    function encrypt(m, e, n) {
      return BigInt(m)  BigInt(e) % BigInt(n);
    }
    const ciphertext = encrypt(65, e, n); // 65 的密文为 2790
  2. 解密函数
    使用私钥 (d, n) 解密密文 c

    function decrypt(c, d, n) {
      return BigInt(c)  BigInt(d) % BigInt(n);
    }
    const plaintext = decrypt(2790, d, n); // 解密结果为 65

注意事项

  • 大整数处理
    JavaScript 的 Number 类型无法处理大数运算,需使用 BigInt
  • 实际应用
    真实场景需使用库(如 node-rsacrypto),避免手动实现安全漏洞。
  • 填充方案
    RSA 需结合 OAEP 等填充方案,防止明文攻击。

完整代码示例

// 密钥生成
const p = 61n, q = 53n;
const n = p * q; // 3233n
const phi = (p - 1n) * (q - 1n); // 3120n
const e = 17n;
const d = modInverse(e, phi); // 2753n

// 加密解密
const m = 65n;
const c = encrypt(m, e, n); // 2790n
const decrypted = decrypt(c, d, n); // 65n

以上代码演示了 RSA 的核心流程,实际应用需结合安全库和更复杂的实现。

标签: 简单js
分享给朋友:

相关文章

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js 实现超链接

js 实现超链接

使用 HTML 的 <a> 标签 在 JavaScript 中动态创建超链接可以通过操作 DOM 实现。通过 document.createElement 创建一个 <a> 元…

js实现筛选

js实现筛选

JavaScript 实现数据筛选的方法 使用 Array.filter() 方法 Array.filter() 是 JavaScript 中最常用的筛选方法,它会创建一个新数组,包含通过回调函数测试…

js实现选择目录

js实现选择目录

在JavaScript中实现选择目录的功能通常需要结合浏览器API或第三方库,以下是几种常见方法: 使用 <input type="file"> 的 webkitdirectory 属性…

js实现保存图片

js实现保存图片

使用Canvas绘制并保存图片 在HTML中创建一个Canvas元素,通过JavaScript绘制内容后转换为图片并保存。Canvas的toDataURL方法可将画布内容转为Base64编码的图片数据…

vue修改简单实现

vue修改简单实现

Vue 修改简单实现 在 Vue 中实现简单的修改操作,通常涉及数据绑定、方法调用和响应式更新。以下是几种常见场景的实现方式: 修改数据并更新视图 Vue 的响应式系统会自动追踪数据变化并更新视图。…