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

异常后Java AES加密失败

齐泰
2023-03-14

我使用以下代码来解密由128位AES加密的密码文本。

final IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
final SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");

final Cipher cipherSpec = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipherSpec.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
cipherSpec.doFinal(DatatypeConverter.parseBase64Binary(encrypted));

我的加密文本是简单的单行语句,我使用以下密钥和初始verctor

Key = "77696567683763656548616574326F6F"; // 128 bit key, hext string
initVector = "6F68706865726F68563274686F6F3761"; // 16 bytes IV, hex string

除了下面的场景之外,一切都很好。

1) 使用密钥作为初始向量并使用初始向量和密钥对纯文本进行加密。解密失败,出现BadPaddingException

2)以密钥为密钥,以初始向量为初始向量进行加密。上述代码无一例外地解密密码文本,但输出是垃圾。不是我加密的。

3)再次解密上面正确加密的密码文本(在第2步),现在它被解密为正确的纯文本。

我的问题是,为什么解密无法在步骤2中解密为正确的密文?

共有1个答案

晋骏喆
2023-03-14

我相信你的密钥,如果是128位,需要是16个字符(utf-8)字节数组,而不是32个字符。所以你会想做这样的事情:

Key = ("7769656768376365").getBytes("UTF-8");
 类似资料:
  • 我有一个应用程序,需要在配置文件中存储一些秘密密码,如数据库和ftp密码/详细信息。我环顾四周,发现了许多使用AES的加密/解密解决方案,但我似乎不知道如何在不改变密钥的情况下使其工作。这意味着我可以加密和解密(使用相同的秘密密钥),但在重启等过程中保持持久性。我似乎无法让秘密钥匙保持不变。下面的示例显示了我的工作方法: 到目前为止还不错。然而,如果我运行它一次,我可能会得到'2Vhht/L80U

  • 当我开始我的申请时,它给了我下面提到的异常。我正在使用加密存储类,但不知道为什么会有这个异常,即使我现在没有访问任何存储类。请引导。 [EDT]0:0:0,32-Exception:java.io.eofException-null java.io.eofException at java.io.datainputstream.readfilly(datainputstream.java:197)

  • 以下示例有什么问题? 问题是解密字符串的第一部分是无意义的。不过,其余的都很好,我明白了...

  • 问题内容: 在Java中处理加密/解密时,这很基本的代码很普遍。 仅这三行就可能引发六个异常,而且我不确定用哪种最干净的方式(就代码的可读性而言)。尝试使用六个catch子句对我来说确实很难闻。 使用此类对象时,是否存在微模式或最佳实践(我显然不知道)? 编辑 对不起,我想我对自己的解释不太好。我的问题不是真正地避免使用try \ catch子句,而是是否存在处理类似情况的通用方法。 加密例外是

  • 我试图在SpringWeb应用程序中的两个用户之间共享一个使用非对称加密加密的对称密钥。但是我得到了javax的错误。加密。BadPaddingException。 下面是问题的细节。在一种控制器方法中,我使用AES对称密钥进行文件加密,然后用另一个用户公钥加密AES密钥并将其保存到MySQL数据库中。 在控制器的另一种方法中,我从数据库获取加密的secretkey,使用私钥解密secretkey

  • 我尝试在服务器上进行gpg加密/解密,对于加密,我使用以下命令行: 我想要找到原因:同一个用户有2个不同的密钥和1个秘密密钥。但现在又出现了一个问题:我删除了错误的键,并再次进行相同的测试。 解密后的答案是: 您需要一个密码短语来解锁用户的密钥:“Droli Mail_Adress”2048位RSA密钥,ID 6D2F1BE9,创建2017-07-19(主密钥ID 09C41BAC) 没有关于gp