Java密码NoSuchPaddingException

use*_*752 3 java encryption aes

我对Java不太熟悉,所以这可能是一个nooby问题。我尝试使用Java加密进行一些实验,但是由于某种原因,我无法获得的实例Cipher。我总是NoSuchPaddingException在这行上,将填充更改为其他内容,如"/NoPadding"行不通:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Run Code Online (Sandbox Code Playgroud)

即使Eclipse表示错误,尝试运行代码也会导致以下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Unhandled exception type NoSuchAlgorithmException
Unhandled exception type NoSuchPaddingException

at Encryption.main(Encryption.java:10)
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?我必须导入某些东西吗?在当前代码中,我import javax.crypto.Cipherjavax.crypto.spec.SecretKeySpec

当我使用Jython时,代码会顺便工作。

Maa*_*wes 5

已从扩展的异常GeneralSecurityException,包括NoSuchPaddingExceptionNoSuchAlgorithmException被检查的异常。已检查的异常是必须用Java处理的异常。您可以通过多种方式处理异常:

  1. throws在您的方法中添加一个子句;
  2. 捕获并包装RuntimeException起来,使用原始原因(基本上,以不必处理的方式升级异常,通常会导致应用程序失败);
  3. 抓住它,对它做一些有用的事情,然后继续前进。

在一般情况下,NoSuchAlgorithmExceptionNoSuchPaddingException你升级例外的RuntimeException,如IllegalStateException。通常,您的算法字符串保持静态,并且需要Java运行时环境来支持,"AES/CBC/PKCS5Padding"因此仅当发生严重错误时才会发生此异常。

GeneralSecurityException如果不想单独处理这些异常,则可以捕获或使用多捕获子句。BadPaddingException并且IllegalBlockSizeException在解密方法期间指示输入失败,因此应分开处理(并注意填充oracle攻击)。

请注意,Jython作为另一种语言,不使用检查的异常,因此异常会完全掉落并导致程序失败。


例:

try {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
} catch(GeneralSecurityException e) {
    throw new IllegalStateException("Could not retrieve AES cipher", e);
} 
Run Code Online (Sandbox Code Playgroud)