Почему не работает это простое шифрование AES?

Почему не работает это шифрование AES? Я написал это на Java для тестирования, но не могу расшифровать. При расшифровке получаю мусор. Зачем? Это так просто - в основном методе распечатайте простой текст, зашифруйте, распечатайте зашифрованный текст, расшифруйте, снова напечатайте простой текст. Я делаю что-то неправильно? Пожалуйста, помогите мне разобраться в проблеме.



import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AESTest {
    public static void main(String [] args) {
        try {
            String plainText = "Hello World!!!!!";
            String encryptionKey = "E072EDF9534053A0B6C581C58FBF25CC";

            System.out.println("Before encryption - " + plainText);

            String cipherText = encrypt(plainText, encryptionKey);

            System.out.println("After encryption - " + cipherText);

            String decrypted = decrypt(cipherText, encryptionKey);

            System.out.println("After decryption - " + decrypted);
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

    public static String encrypt(String plainText, String passkey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
        SecretKeySpec key = new SecretKeySpec(hexStringToByteArray(passkey), "AES");
        cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(new byte[cipher.getBlockSize()]));
        String cipherText = new String(cipher.doFinal(plainText.getBytes()));
        return cipherText;
    }

    public static String decrypt(String cipherText, String passkey) throws Exception{
        Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
        SecretKeySpec key = new SecretKeySpec(hexStringToByteArray(passkey), "AES");
        cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(new byte[cipher.getBlockSize()]));
        String plainText = new String(cipher.doFinal(cipherText.getBytes()));
        return plainText;
    }

    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                                 + Character.digit(s.charAt(i+1), 16));
        }
        return data;
    }
}
5
задан sat 18 August 2011 в 21:55
поделиться