You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中KeyPairGenerator密钥大小计算及512字节密钥报错问题

为啥你的RSA密钥初始化会报"Invalid key sizes"?

嘿,我来帮你理清这个关键的概念混淆问题!

你提到的公式 最大字节数=密钥长度(比特)/8-11这是PKCS1Padding模式下RSA加密能处理的最大明文字节数,可不是用来设置RSA密钥本身长度的呀!

你代码里的核心错误

你的代码 kpg.initialize(4096/8-11) 计算后得到的是 501——也就是说你试图生成一个501比特的RSA密钥,但RSA密钥长度有严格的规范:

  • 必须是符合算法要求的整数,业界通用的合法取值是1024、2048、4096、8192比特(这些都是经过安全验证的标准长度,通常是2的幂)
  • 501比特既不是标准长度,还远低于当前安全要求的最低标准(现在至少推荐2048比特起步),所以KeyPairGenerator直接抛出了Invalid key sizes错误。

正确的做法

如果你想实现“能加密501字节明文”的需求,对应的RSA密钥长度应该是4096比特(因为4096/8 -11 = 501),所以初始化代码要写成这样:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
// 直接传入密钥长度的比特数:4096
kpg.initialize(4096);

用这个代码生成的密钥,后续搭配RSA/ECB/PKCS1Padding模式时,就能正常处理最大501字节的明文了。

额外小提醒

你说用8192/8-11时正常?这大概率是你写错了——如果真传入1013比特,同样会报错。应该是你实际用的是8192作为初始化参数,才成功生成了8192比特的密钥,对应最大明文长度正好是1013字节~

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

火山引擎 最新活动