You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在window.crypto.subtle中使用RSA实现多接收方加密?

实现方案

window.crypto.subtle.encrypt原生仅支持单次传入单个公钥执行加密,直接传入公钥数组不符合API参数要求,自然无法生效。你可以遍历公钥数组,对每个公钥独立执行加密操作,推荐用Promise.all做并行处理提升效率。

可直接运行的代码示例

// 提前一次性编码明文,避免循环内重复执行冗余操作
const encodedPlaintext = enc.encode(message);
const encryptedList = await Promise.all(
  participantKeys.map(async (pubKey) => {
    return window.crypto.subtle.encrypt(
      rsaOptions,
      pubKey,
      encodedPlaintext
    )
  })
)

encryptedList数组顺序和participantKeys一一对应,每个元素就是对应公钥加密后的密文,可直接按顺序分发给对应接收方。

大容量明文优化建议

如果你的待加密内容长度超过RSA密钥允许的最大加密长度(比如2048位RSA最多加密245字节内容),或者加密效率要求更高,推荐使用混合加密逻辑:

  • 先生成随机AES对称密钥
  • 用AES密钥加密明文内容
  • 遍历所有接收方公钥,仅加密短的AES密钥
  • 最终分发内容为「所有公钥加密后的AES密钥列表 + AES加密后的明文」,接收方用自己的私钥解密拿到AES密钥,再解密明文即可,性能比直接用RSA加密长内容高数十倍。

内容的提问来源于stack exchange,提问作者amazingdoodler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:09:04