当前位置:首页 > 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
分享给朋友:

相关文章

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…