如何在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
相关产品推荐
相关产品推荐

