Java 解密未返回正确的明文

Java 解密未返回正确的明文,java,cryptography,Java,Cryptography,我正在尝试创建一个简单的AES加密/解密模块,以便在更大的项目中使用,但我很难让AES方法正常工作。我已经做了大量的研究,但我无法找出代码中的错误(我怀疑我遗漏了一些简单的东西) 主要内容: AES: 结果: Please enter a phrase to encrypt: test Using key : [B@442d9b6e to encrypt Using key [B@3d012ddd to decrypt Ciphertext: [B@515f550a Plaintext: dGV

我正在尝试创建一个简单的AES加密/解密模块,以便在更大的项目中使用,但我很难让AES方法正常工作。我已经做了大量的研究,但我无法找出代码中的错误(我怀疑我遗漏了一些简单的东西)

主要内容:

AES:

结果:

Please enter a phrase to encrypt: test
Using key : [B@442d9b6e to encrypt
Using key [B@3d012ddd to decrypt
Ciphertext: [B@515f550a
Plaintext: dGVzdA==
我不明白为什么我的加密/解密似乎在使用不同的密钥,而我在开始时只设置了一次密钥。我是否创建了一个错误的密钥

我也试过:

byte[] key = new byte[32];

SecureRandom r = new SecureRandom();

r.nextBytes(key);

// Set key for AES
aes.setKey(key);

遇到同样的问题。

如果您在AES类中跟踪
这个.key
,一直使用
数组进行编码和解码。toString(this.key.getEncoded())
它看起来确实像是在使用持久密钥

this.key.getEncoded().toString())
每次都返回不同的表示形式,但实际的字节数组似乎是相同的

我换了

String plaintext = Base64.getEncoder().encodeToString(decodedPlaintext);


它似乎起了作用。

您对解密的明文进行了Base64编码。base64字符串
dGVzdA=
test
。我不确定问题是什么,代码工作正常。我明白了,我知道这很愚蠢。getEncoded()返回不同字节的操作是什么?不知道,您必须查看源代码才能了解发生了什么。顺便说一句,所有这些
[B@3d012ddd
查找字符串不是值,它们是
对象#toString()
的输出(“对象ID”)。前缀
[B
表示“字节数组”。请参阅
byte[] key = new byte[32];

SecureRandom r = new SecureRandom();

r.nextBytes(key);

// Set key for AES
aes.setKey(key);
String plaintext = Base64.getEncoder().encodeToString(decodedPlaintext);
String plaintext = new String(decodedPlaintext, StandardCharsets.UTF_8);