当前位置: 首页 > 知识库问答 >
问题:

用错误密钥解密Java AES

杜禄
2023-03-14

我编写了一个简单的Java AES加密和解密,如下所示(用于学习):

//Encryption 
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");  
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
 String encryptedString = Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes()));
return encryptedString;

//Decryption
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
String decryptedString = new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt)));
return decryptedString;
javax.crypto.BadPaddingException: Given final block not properly padded

编辑:

我想我搞错了。黑客可能不会使用我的程序来解密。所以对于AES来说,如果一个人解密失败,他会知道解密失败,但不会像我想的那样,从解密中得到错误的字节?这太可怕了...

共有1个答案

颛孙英才
2023-03-14

您的代码没有任何问题(尽管您可以通过为字符和字节之间的转换指定编码而不是依赖平台编码来使其更加健壮)。填充具有一定的格式,以便在解密后可以移除。当您使用错误的密钥解密时,填充也是乱码,无法删除。这会导致异常。

在大多数情况下,攻击者会知道他得到了错误的密钥,不仅仅是因为填充。数据字节通常也有某种结构(例如,某种文件格式),或者在你的情况下,他会检测到不寻常的字符或无效的字符编码。如果以UTF-8为例,并不是每个二进制字符串都是有效的UTF-8编码。

 类似资料:
  • 我正在编写android应用程序,使AES加密/解密的文件。我希望能够检测是否指定了不正确的密码,因此不匹配的密钥是为解密派生的。我使用aes/cbc/pkcs7padding和256位密钥。如果我执行cipher.doFinal(),我可以尝试/捕捉BadPaddingException,它会告诉我有些地方出错了,可能是key不正确。但是如果我使用CipherInputStream读取加密文件,

  • 问题内容: 我正在使用3DESC解密数据,但出现以下异常 我的代码: 打印上面使用的所有字节数组 问题答案: DES- EDE密码可与3个不同的子密钥一起使用,因此密钥大小应为24字节(3乘8字节)。如果您只想使用2个键(即在此模式下,第一个键==最后一个键),则只需复制键数组的前8个字节。

  • 问题内容: 我正在使用静态方法在类中使用javax.crypto加密和解密消息。我有2个使用cipher和dcipher的静态方法,以完成他们应该做的事情,我需要初始化一些变量(也是静态的)。但是,当我尝试使用它时,我得到的InvalidKeyException与我提供给ecipher.init(…)的参数。我找不到原因。这是代码: 问题答案: AES-256(和AES-192)要求为JRE安装无

  • 我有一个全新的Linux Mint14安装。已安装Thunderbird&Enigmail。 我试着删除我的密钥并重新移植它。我试着改变各种设置。但我想不出问题出在哪里。我以前使用过Linux/Thunderbird/Enigmail,从来没有出现过这个错误。

  • 在一个做其他事情的大型应用程序中——我需要加密和解密一个文件。所以我一直在四处寻找,并实现了这两个核心功能,基本上使用RSA密钥包装一个随机的AES密钥来加密一个文件。对称键和iv被写入文件的开头。 我在下面的解密函数部分得到一个异常(“javax.crypto.BadPaddingException:Decryption error”)。在肯安迪夫线路上——doFinal。具体来说,这一行是异常

  • 我正在尝试解密存储在SecureStorage文件中的数据库密码。我正在使用nCipherKM HSM安全提供程序,用于解密的密钥加密密钥存储在密钥存储库(文件夹)中。当我尝试通过传递密钥存储库密码来加载HSM密钥存储库时,它无法使用以下异常加载密钥存储库。不确定此错误的根本原因是什么。 代码片段: 例外: Java语言io。IOException:提供了密码,但所有密钥都受模块保护。在com。n