gpt4 book ai didi

Java AES 解密得到解密的十六进制而不是解密的字符串

转载 作者:行者123 更新时间:2023-12-02 13:27:19 25 4
gpt4 key购买 nike

当尝试用Java解密十六进制字符串时,我能够解密该字符串,但因为加密的原始数据不是字符串,而是实际上32位十六进制值。

加密的十六进制字符串为“4ba3442d4bc3baf5126b7b271b359e42”,此处使用的 key 为“ac00ac00ac00ac00ac00ac00ac00ac00”

我应该从aes.online-domain-tools.com检索得到的输出是“× z X . b 3 ý . ä g í ý b Þ 。” 但从这个字符串中可以看出,只有 zXb3gb 是普通 ASCII 字符,其他都是扩展字符,在控制台中返回为 �,其值为 65533 的 int 值反过来对于我的原始数据来说是不正确的。

但是,如果我们看到 aes.online-domain-tools.com 的输出,则扩展 ASCII 字符的 ASCII 值就是原始数据的正确值但因为它不是普通的 ASCII 字符,而是扩展字符,所以它变成了值为 65533 的 �,在转换为整数时会给出错误的值。

我想知道不是将其解密为字符串,而是可以直接将十六进制字符串解密为十六进制字符串,而不是解密为字符串并转换为 int。

目前这是我的解密代码:

public static String decrypt(String strToDecrypt)
{
char[] ch=strToDecrypt.toCharArray();

System.out.println("Test: " + ch);
try
{

Cipher cipher2 = Cipher.getInstance("AES/ECB/NoPadding");

cipher2.init(Cipher.DECRYPT_MODE, secretKey);

setDecryptedString(new String(cipher2.doFinal(Hex.decodeHex(ch)))); // Output as String eg: testingone


}
catch (Exception e)
{

System.out.println("Error while decrypting: "+e.toString());
}
return null;
}

这是我用来将其转换为 INT 以检索原始值的代码块:

        System.out.println("String To Decrypt : " + strToDecrypt);

final String decryptedString = getDecryptedString();
char[] asciiLine = decryptedString.toCharArray();

for (char ch:asciiLine)
{
System.out.println("Decrypted : " + (int)ch+" ");
}

System.out.println("TestDecrypted : " + test.getDecryptedString());
System.out.println("StringDecrypted : " + decryptedString);
System.out.println("DecodeDecrypted : " + Integer.decode(decryptedString));

最佳答案

你的解密本身看起来很好......但是你对返回数据的处理却不是......

doFinal 返回一个字节数组

您通过将其传递给 new String(...) 来处理它

您可能想要将该字节数组编码为十六进制数字字符串

看看这里... How to convert a byte array to a hex string in Java?

关于Java AES 解密得到解密的十六进制而不是解密的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43336577/

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