当试图解密Java中的Hex字符串时,我能够解密字符串,但是因为原始数据被加密不是字符串,而是实际的32位十六进制值。Java AES解密获取Decrypted Hex而不是解密字符串
加密的十六进制字符串是“4ba3442d4bc3baf5126b7b271b359e42”,这里使用的密钥是“ac00ac00ac00ac00ac00ac00ac00ac00”
其即时通讯应该得到的输出aes.online-domain-tools.com作为检索 is “×z X。b 3。g gíbÞ。”但从该字符串中可以看出,只有zXb3gb是正常的ASCII字符,而其他字符是扩展字符,它们在控制台中成为一个which,其中包含一个int值,这反过来对我的原始数据不正确数据。
但是如果我们看到aes.online-domain-tools.com输出,扩展ASCII字符的ASCII值的的原始数据的正确的价值观,而是因为它是不正常的ASCII字符但是一个扩展字符,它将变成一个值为这将给我错误的值,同时被转换为整数。
我想知道而不是将它解密为字符串,我可以直接将十六进制字符串解密为十六进制字符串,而不是解密为字符串并将其转换为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));
加密的输出是任意字节,无效的可打印字符。 –
可能的重复[如何在Java中将字节数组转换为十六进制字符串?](http://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-字符串中的Java) –