當試圖解密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) –