获取RSA密码的块大小

时间:2016-05-09 15:24:37

标签: java algorithm encryption cryptography

我使用RSA算法创建了Cipher,当我想要使用块大小时,我遇到了问题。使用以下代码段声明Cipher

        encrypt=Cipher.getInstance("RSA");
         encrypt.init(Cipher.ENCRYPT_MODE,myPublicKey);

当我尝试使用encrypt.getBlockSize()获取块大小时,我得到“0”,根据Javadoc,当使用的算法不是块密码时,答案就是答案,这不是RSA算法。

在调试模式下,如果我深入研究Cipher,我可以在'spi'成员中看到存在缓冲区,并且它的大小似乎与实际的块大小相对应。

有人知道为什么getBlockSize()返回“0”而不是spi的缓冲区大小?

2 个答案:

答案 0 :(得分:3)

RSA不被视为分组密码。分组密码是对称的,使用相同的密钥进行加密和解密。与AES不同,无论密钥大小如何,块大小都是固定的,RSA加密或签名操作的输出将根据密钥大小而变化。

如果您想知道要使用的密钥的examine the modulus的RSA密文的大小。

答案 1 :(得分:0)

Cipher 类的接口不显示允许的输入数据大小,它以一种非平凡的方式取决于模位长度和应用的填充算法。

有以下选项:

  1. [Sun Java]使用反射访问Cipher实现类IllegalBlockSizeException成员buffer的长度

  2. [常见] 使用搜索算法来评估允许的最大输入数据大小,而不是引发 RSACipher