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

使用RSA加密AES密钥时触发IllegalBlockSizeException错误求助

解决RSA加密时的IllegalBlockSizeException异常

问题根因

你代码里犯了逻辑错误:尝试用RSA加密的是自己的RSA公钥(Store.myPublicEncoded),而非要传输的AES对称密钥。

  • 2048位RSA搭配PKCS1Padding时,最大可加密明文长度为 密钥字节数 - 11,也就是2048/8 -11 = 245字节。
  • 2048位RSA公钥的X.509编码(PublicKey.encoded输出格式)大小约294字节,远超245字节限制,因此抛出IllegalBlockSizeException。

修正代码

将加密目标替换为AES密钥的编码(Store.simmetrycKeyEncoded),关键代码修改如下:

// 替换原错误代码,加密AES密钥而非RSA公钥
Base64.encode(cipher.doFinal(Store.simmetrycKeyEncoded), Base64.NO_WRAP).decodeToString()

额外安全优化建议

  1. 指定AES安全模式与填充:
    原代码Cipher.getInstance("AES")会使用系统默认的ECB模式(不安全),建议改用带完整性校验的GCM模式:
private val simmetrycCipher = Cipher.getInstance("AES/GCM/NoPadding")
private val simmetrycDecodeCipher = Cipher.getInstance("AES/GCM/NoPadding")

注意GCM模式需要初始化向量(IV),初始化Cipher时需传入IvParameterSpec。

  1. RSA使用更安全的OAEP填充:
    PKCS1Padding安全性弱于OAEP,建议替换为:
private val cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding")
private val decrCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:43:33