Dariusz Mydlarz
Dariusz Mydlarz

Reputation: 3002

Java AES Decryption: random chars & message at the end

I have a problem with decrypting a message using AES. At the end when I expect a message, e.g.

ala123

Instead of that I receive sth like:

...6�b}\7�k�8�vFP�8~%��_zժF��FW��O_e���ó������������ala123

The message I pass to encryption is built as:

The question is why at the end I eventually receive my expected message, but with a lot of rubbish chars at the beggining?

My encryption code is:

private static final String AES_TOKEN = "my_very_secret_token";

// encrypted is base64 string
public String decrypt(String encrypted) throws Exception {
    byte[] decrypted = Base64.getDecoder().decode(encrypted);
    return new String(aesDecrypt(decrypted), "UTF-8");
}

private byte[] aesDecrypt(byte[] message) throws Exception {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

    byte[] token = MessageDigest.getInstance("SHA-256").digest(AES_TOKEN.getBytes());
    SecretKeySpec secretKey = new SecretKeySpec(token, "AES");

    IvParameterSpec iv = new IvParameterSpec(Arrays.copyOf(message, 16));

    cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
    return cipher.doFinal(message);
}

Upvotes: 0

Views: 1901

Answers (1)

PunDefeated
PunDefeated

Reputation: 596

It looks like you aren't removing the IV from the beginning of message after reading it in to iv. That would explain the garbage being at the start of the decrypted message.

Upvotes: 3

Related Questions