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

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const ch…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…