1
我試圖解密AES-ECB 128加密字符串。該字符串沒有用Java加密,我接收它作爲Java輸入,我想解密它。在Java中執行AES解密時出現奇怪字符
我已經與AESLib
uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char data[] = ""; //16 chars == 16 bytes
aes128_enc_single(key, data);
加密的消息 「」 中的Arduino以加密的形式的字符串是 「1425EC9B5D983FF7DF45A4A8089E69FC」。
這就是我在Java做解密:
private static byte[] key = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15};
public static String decrypt()
{
byte[] info= hexStrToByteArray("1425EC9B5D983FF7DF45A4A8089E69FC");
try
{
Cipher cipher = Cipher.getInstance("AES/ECB/NOPADDING");
final SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedResult= cipher.doFinal(info);
String result = new String(result, "UTF-8");
return result;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
private static byte[] hexStrToByteArray(String hex) {
ByteArrayOutputStream baos = new ByteArrayOutputStream(hex.length()/2);
for (int i = 0; i < hex.length(); i += 2) {
String output = hex.substring(i, i + 2);
int decimal = Integer.parseInt(output, 16);
baos.write(decimal);
}
return baos.toByteArray();
}
我從這個函數得到的是:.1 @JYyғv
我猜是編碼的問題。我怎樣才能以可讀的形式得到解密的結果?
謝謝!
你可以發佈a)密鑰(假設它是一個非敏感的測試密鑰),b)你的'hexStrToByteArray'函數,和c)有關它如何加密的一些細節? –
如果解密爲亂碼,則密鑰或數據不正確或至少錯誤地應用於解密功能。 – zaph
對不起,我在主要信息中添加了更多信息 – Khuzrly