Java AES解密获取解密的十六进制而不是解密的字符串
在Java中尝试解密十六进制字符串时,我能够解密该字符串,但因为加密的原始数据不是字符串,而是32位十六进制值 加密的十六进制字符串是“4ba3442d4bc3baf5126b7b271b359e42”,这里使用的密钥是“AC00AC00AC00AC00AC00AC00AC00” 我应该从aes.online-domain-tools.com获取的输出是“×zx.b3ý.ýgí253; bÞ。”但是从这个字符串中可以看出,只有zXb3gb是普通ASCII字符,其他是扩展字符,而扩展字符反过来变成了一个ASCII字符� 控制台中的int值为65533,这与我的原始数据不符 但是,如果我们看到aes.online-domain-tools.com的输出,扩展ASCII字符的ASCII值是原始数据的正确值,但由于它不是普通ASCII字符,而是扩展字符,因此它成为� 使用值65533,这将在转换为整数时给我错误的值 我想知道的不是将其解密为字符串,而是能够将十六进制字符串直接解密为十六进制字符串,而不是解密为字符串并转换为int 目前这是我的解密代码:Java AES解密获取解密的十六进制而不是解密的字符串,java,encryption,cryptography,aes,Java,Encryption,Cryptography,Aes,在Java中尝试解密十六进制字符串时,我能够解密该字符串,但因为加密的原始数据不是字符串,而是32位十六进制值 加密的十六进制字符串是“4ba3442d4bc3baf5126b7b271b359e42”,这里使用的密钥是“AC00AC00AC00AC00AC00AC00AC00” 我应该从aes.online-domain-tools.com获取的输出是“×zx.b3ý.ýgí253; bÞ。”但是从这个字符串中可以看出,只有zXb3gb是普通ASCII字符,其他是扩展字符,而扩展字符反过来变成
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返回一个字节数组 您通过将其传递给新字符串(…)来处理它 您可能需要将bytearray编码为十六进制数字字符串
看看这里 加密的输出是任意字节,不是有效的可打印字符。可能是Oh my.的重复。。谢谢兄弟。。已成功打印预期输出。。谢谢你的指导。。因此,处理返回数据的方法是错误的。。