gpt4 book ai didi

Java AES 解密导致 BadPaddingException

转载 作者:行者123 更新时间:2023-12-01 11:52:21 25 4
gpt4 key购买 nike

我正在尝试创建 AES 加密/解密方法,但如果不使用 AES/ECB/NoPadding,我似乎无法获得原始输入。现在我尝试使用 AES/CBC/PKCS7Padding。我已经确认从文件读取和写入字节工作正常。使用 PKCS7 填充,我从

得到 BadPaddingException
cipher.doFinal(encrypted)

在解密方法中。如果没有填充,也不异常(exception) - 但是输出是困惑的。我花了时间浏览关于这个完全相同问题的其他帖子,但我似乎找不到适合我的问题的解决方案。

如何解读该输出?

protected boolean encrypt(String place, String encrypt) {
try {

// encrypt the text
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(encrypt.getBytes());

Context context = HomeViewActivity.hva.getApplicationContext();
FileOutputStream writer = context.openFileOutput(file_name.get(place.toUpperCase()), Context.MODE_PRIVATE);
writer.write(encrypted);
writer.close();
return true; //successfully wrote encrypted string to file
}catch(Exception e) {
e.printStackTrace();
}
return false;
}
protected String decrypt(String place){
String decrypted = null;
try{
Context context = HomeViewActivity.hva.getApplicationContext();
// decrypt the text
cipher.init(Cipher.DECRYPT_MODE, aesKey);
FileInputStream reader = context.openFileInput(file_name.get(place.toUpperCase()));
byte[] encrypted = new byte[reader.available()];
reader.read(encrypted);
reader.close();
decrypted= new String(cipher.doFinal(encrypted));
}catch(FileNotFoundException e){return null;}
catch(IllegalBlockSizeException |
BadPaddingException |
InvalidKeyException |
NoSuchAlgorithmException |
IOException |
NoSuchPaddingException e){e.printStackTrace();}
return decrypted;
}

编辑1:使从文件中读取的加密数组具有适当的大小

编辑2:在构造函数中初始化 key 和密码,而不是在每个方法中

最佳答案

问题在于 ECB 不使用 IV,而 CBC 以及大多数其他操作模式确实使用 IV 值。 Java在没有明确给出IV值的情况下会随机化IV值,这意味着解密后的明文不正确。

对于 AES CBC 模式,这意味着明文的前 16 个字节(初始 block )包含随机字符。由于初始 block 之后的 block 包含正常的明文,因此您不会在代码中得到 BadPaddingException

此问题的正常解决方案是在密文中添加 IV 值前缀或先将其写入底层流。不用说,您必须在解密过程中检索 IV,并通过更改缓冲区中的偏移量或推进流来跳过解密过程中的 IV 值(对于您可能不想复制整个密文的文件) .

关于Java AES 解密导致 BadPaddingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com