Problem bei AES-Entschlüsselung

ThomasMo

Grünschnabel
Hallo zusammen,

ich habe leider ein kleines Problem bei der Entschlüsselung eines byte-Arrays. An sich werden die Daten zwar zwar korrekt entschlüsselt, allerdings gehen mir (unabhängig von der Länge des Dateninputs) immer genau 16 Byte verloren. (Beim Input wird natürlich darauf geachtet, dass ich nur komplette 16 Byte-Blöcke reingebe).

Mein Code:

Java:
private static final byte[] CA_INITS = {/*16 Byte Schlüssel...*/};

	private static final byte[] CA_KEYS = {/*16 Byte Schlüssel...*/}

           private static void init() throws Exception
	{
		Security.addProvider(new com.sun.crypto.provider.SunJCE());
		String provider = "SunJCE";
		cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", provider);
		key = new SecretKeySpec(CA_KEYS, "AES");
	}


	public static byte[] decrypt(byte[] ao_Bytes) throws Exception
	{
		init();
		
		mode = javax.crypto.Cipher.DECRYPT_MODE;
		cipher.init(mode, key, new IvParameterSpec(CA_INITS));

		InputStream Byteistrm = new ByteArrayInputStream(ao_Bytes);
		InputStream istrm = new javax.crypto.CipherInputStream(Byteistrm, cipher);
		OutputStream ostrm = new ByteArrayOutputStream(ao_Bytes.length);

		byte[] buffer = new byte[ao_Bytes.length];
		for (int len = 0; (len = istrm.read(buffer)) >= 0;)
		{
			ostrm.write(buffer, 0, len);
		}

		return ((ByteArrayOutputStream) ostrm).toByteArray();
	}

Was ich durch debuggen schon rausbekommen habe: Im ersten Druchlauf der for-Schleife bekomme ich einen Datenblock mit 496 Byte länge, dann immer 512 bis zum letzten, der idR kürzer ist. Meine Vermutung war, dass beim ersten Durchlauf was "verschluckt" wird. Was ich dann mal gemacht habe war den Stream anfangs zu markieren, einmal durchzulaufen und dann mittels reset() wieder zurück zu gehen und nochmal durchzulaufen - Länge dann zwar korrekt, dafür aber Datenmüll im Output, also auch nicht das wahre :mad: Kann mir irgendjemand einen Tip geben, was ich falsch mache? :confused:
 
Zurück