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

One*_*ree 1 java encryption cryptography padding ecb

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

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

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

ski*_*ppy 5

除了我的类路径中的库存JDK之外,我运行了这段代码片段并在输出中为AES进行了grepped:

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

我看到这一行:

    Cipher.AES SupportedPaddings    NOPADDING|PKCS5PADDING|ISO10126PADDING
Run Code Online (Sandbox Code Playgroud)

这告诉我你的填充是支持的.

我也看到了这一行:

    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
Run Code Online (Sandbox Code Playgroud)

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

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