我使用RSA算法创建了Cipher
,当我想要使用块大小时,我遇到了问题。使用以下代码段声明Cipher
:
encrypt=Cipher.getInstance("RSA"); encrypt.init(Cipher.ENCRYPT_MODE,myPublicKey);
当我尝试使用encrypt.getBlockSize()
获取块大小时,我得到“0”,根据Javadoc,当使用的算法不是块密码时,答案就是答案,这不是RSA算法。
在调试模式下,如果我深入研究Cipher
,我可以在'spi'成员中看到存在缓冲区,并且它的大小似乎与实际的块大小相对应。
有人知道为什么getBlockSize()
返回“0”而不是spi的缓冲区大小?
答案 0 :(得分:3)
RSA不被视为分组密码。分组密码是对称的,使用相同的密钥进行加密和解密。与AES不同,无论密钥大小如何,块大小都是固定的,RSA加密或签名操作的输出将根据密钥大小而变化。
如果您想知道要使用的密钥的examine the modulus的RSA密文的大小。
答案 1 :(得分:0)
Cipher 类的接口不显示允许的输入数据大小,它以一种非平凡的方式取决于模位长度和应用的填充算法。
有以下选项:
[Sun Java]使用反射访问Cipher实现类IllegalBlockSizeException
成员buffer
的长度
[常见] 使用搜索算法来评估允许的最大输入数据大小,而不是引发 RSACipher
。