使用AES / ECB128 / PKCS5Padding的密码不断抛出“无此算法”异常

时间:2012-05-02 15:26:56

标签: java encryption cryptography padding ecb

有谁知道这段代码有什么问题?

Cipher cipher = Cipher.getInstance("AES/ECB128/PKCS5Padding", "SunJCE");
  • 算法:AES
  • 操作模式:ECB(附加128以指定块大小)
  • PaddingSchemce:PKCS5Padding

这对我来说似乎是正确的,但它在实例化过程中不断抛出“No such algorithm”异常。

3 个答案:

答案 0 :(得分:5)

除了我的类路径中的JDK库存之外,我运行了这段代码片段并在输出中使用了grep:

for (Provider provider: Security.getProviders()) {
  System.out.println(provider.getName());
  for (String key: provider.stringPropertyNames())
    System.out.println("\t" + key + "\t" + provider.getProperty(key));
}

我看到了这一行:

    Cipher.AES SupportedPaddings    NOPADDING|PKCS5PADDING|ISO10126PADDING

这表明我支持你的填充。

我也看到了这一行:

    Cipher.AES SupportedModes       ECB|CBC|PCBC|CTR|CTS|CFB|OFB|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64|CFB72|CFB80|CFB88|CFB96|CFB104|CFB112|CFB120|CFB128|OFB72|OFB80|OFB88|OFB96|OFB104|OFB112|OFB120|OFB128

我注意到ECB出现在这里,但ECB128没有,所以我想知道这是不是问题。我要承认我不知道这些信息是否在正确的轨道上。

编辑添加: 我可以用ECB而不是ECB128调用Cipher.getAlgorithm(“AES / ECB / PKCS5Padding”)。在我看来,与ECB一样,您无法指定块大小,至少可以使用此处提供的内容。不确定这是否足够你。

答案 1 :(得分:3)

AES的静态块大小为128位(或16字节)。 Rijndael,用于创建AES的密码确实具有多个块大小。在调用init方法期间配置密钥时,会自动选择密钥大小。

模式后面的位不用于配置密码的块大小。它们更用于配置Cipher Feedback (CFB) mode of operation的反馈大小。现在这是一个相当模糊的模式,特别是如果不是所有的块加密都被使用。虽然它们也可以正式用于OFB模式may be security issues when specifying smaller feedback sizes。应该保留这两种模式以提供对传统协议的支持。

如果使用,"CFB""OFB"字符串后面的值应大于0且不大于块大小,增量为8.该数字指定为反馈位数和 - 像大多数加密API一样 - Java的JCE仅限于处理字节。

答案 2 :(得分:1)

Sun JCE提供商有限。请尝试使用BouncyCastle JCE提供程序(http://www.bouncycastle.org/)。