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

Android使用RSA OAEP解密时MGF1不支持SHA-256摘要如何解决?

Android RSA/ECB/OAEPWithSHA-256AndMGF1Padding 适配问题解答

1. 限制存在的原因

  • 该限制属于Android Keystore系统的硬编码逻辑,根源是早期Android加密实现和TEE(可信执行环境)硬件能力绑定:早期绝大多数安卓设备的TEE厂商固件仅实现了MGF1摘要搭配SHA-1的OAEP填充方案,谷歌为了保证加密能力在全机型的兼容性,统一限制了Keystore的RSA-OAEP的MGF1仅支持SHA-1。
  • 早期Android加密框架迭代较慢,RSA-OAEP搭配SHA-256的相关标准普及晚于Keystore核心功能定稿,旧版本系统不会新增该类非安全补丁类的特性。

2. 后续版本调整情况

  • Android 13(API Level 33)及以上版本已经正式支持MGF1ParameterSpec.SHA256参数,该限制已被移除。
  • 低于API 33的系统版本不会再调整该限制,谷歌对旧版本系统仅推送安全漏洞补丁,不会新增加密算法支持类的功能更新。

3. 可行的绕过方案

  • 方案一:密钥无需存储在Keystore的场景下,指定使用第三方加密提供器初始化Cipher,不走系统Keystore的实现。推荐使用SpongyCastle(Android适配版BouncyCastle),初始化代码修改为Cipher.getInstance(transformation, "SC"),将SpongyCastle打包进APK即可不受系统限制。注意该方案的加密运算运行在Android用户态内存中,相比Keystore的TEE级安全等级更低,敏感密钥需做好内存防护。
  • 方案二:必须使用Keystore存储密钥的场景下,可和对端协商调整加密参数:OAEP主哈希保留SHA-256,仅将MGF1的摘要算法改为SHA-1,该组合可兼容所有版本的Android Keystore,且安全强度下降极微,可满足绝大多数业务的安全要求。
  • 方案三:仅面向高版本用户的场景下,可做版本适配:API 33及以上使用SHA-256的MGF1参数,低于33的版本走上述两个兼容方案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:09:03