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

Web Crypto中SHA-256加密正常SHA-512有时失败的原因

RSA-OAEP加密长度限制:SHA-512与SHA-256的差异解析

这不是Bug,是RSA-OAEP加密算法的固有特性,根源在于OAEP填充机制对哈希算法输出长度的依赖。

核心长度限制公式

RSA-OAEP的最大明文长度由以下公式决定:

最大明文长度 = (密钥位数 / 8) - 2 * 哈希输出字节数 - 2

其中:

  • 2048位RSA密钥对应256字节(2048/8)
  • SHA-256输出32字节,SHA-512输出64字节

代入计算:

  • SHA-256:256 - 2*32 - 2 = 190字节 → 消息长度≤190字节时可正常加密
  • SHA-512:256 - 2*64 - 2 = 126字节 → 消息超过126字节就会触发加密失败

这就是你观察到的现象:短消息(≤126字节)两种哈希都有效,长消息超过126字节时,SHA-512因超出明文上限失败,而SHA-256还在允许范围内。

你的问题解答

  1. 是特性还是Bug?
    是特性,符合PKCS#1 v2.2(RSA加密标准)中对OAEP填充的定义,所有遵循该标准的实现都会有这个限制。

  2. 必须用SHA-256吗?
    不需要。如果想继续用SHA-512,有两种方案:

    • 改用更长的RSA密钥:比如4096位密钥,SHA-512对应的最大明文长度为512 - 2*64 -2 = 382字节,能支持更长消息
    • 采用混合加密方案(推荐):先用AES等对称加密算法加密长消息,再用RSA-OAEP加密AES密钥。这是实际生产环境的常规做法,因为RSA天生不适合加密大体积数据,对称加密效率远高于非对称加密。
  3. 官方长度限制标准
    来自PKCS#1 v2.2规范,该标准明确了RSA-OAEP的明文长度计算规则,核心就是密钥长度减去两倍哈希输出长度再减去2(OAEP填充的固定开销)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:42:25