gpt4 book ai didi

java - 为什么解密后的数据与使用java加密的原始数据不同?

转载 作者:行者123 更新时间:2023-12-02 00:23:21 24 4
gpt4 key购买 nike

我正在使用java进行AES加密和解密。我使用 Appache commons 库进行字符串到字节的转换,反之亦然。但是当我解密数据时,它与使用相同 key 加密的输入数据不同吗?为什么会这样

这是我的代码:

public static void main(String[] args) throws Exception {



String key="this is key";

String message="This is just an example";

KeyGenerator kgen = KeyGenerator.getInstance("AES");

kgen.init(128, new SecureRandom(Base64.decodeBase64(key)));

// Generate the secret key specs.
SecretKey skey = kgen.generateKey();

byte[] raw = skey.getEncoded();

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

byte[] encrypted= cipher.doFinal(Base64.decodeBase64(message));

String encryptedString=Base64.encodeBase64String(encrypted);

cipher.init(Cipher.DECRYPT_MODE, skeySpec);

byte[] original =
cipher.doFinal(Base64.decodeBase64(encryptedString));

System.out.println(Base64.encodeBase64String(original));


}

我得到输出“Thisisjustanexamplc=”,它应该是“这只是一个例子”。我需要在代码中更改什么。提前致谢

最佳答案

您正在使用 base-64 解码您的纯文本消息。您应该使用 message.getBytes(StandardCharsets.UTF_8) (或其他一些编码)来转换为字节。对加密操作的结果进行 Base-64 编码,然后在解密之前对其进行 Base-64 解码。使用new String(original, StandardCharsets.UTF_8)将解密操作的结果转换回文本。

换句话说,使用字符编码在文本和字节之间进行转换。使用base-64编码和解码将二进制数据编码为文本形式。

关于java - 为什么解密后的数据与使用java加密的原始数据不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10500512/

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