Verschlüsselung - IllegalBlockSizeException

  • Themenstarter Themenstarter Sascha_
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

Sascha_

Gast
Hallo!
Ich hab mir grade was geschrieben zum ver- und entschlüsseln von Strings. Leider schmeißt er mir beim entschlüsseln eine Exception und ich weiß nicht, was ich da falsch mache bzw. wie ich das lösen kann.

Code:
	public static String encrypt(String plaintext) {
		String encryptString="";
		
		try { 
			  byte[] plainTextBytes = plaintext.getBytes("ISO-8859-1");
			  SecretKeySpec specKey = new SecretKeySpec(KEY, "AES");
			  Cipher encryptCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
			  encryptCipher.init(Cipher.ENCRYPT_MODE, specKey);

			  byte[] encryptedBytes = null;
			  encryptedBytes = encryptCipher.doFinal(plainTextBytes);
			  encryptString = encryptedBytes.toString();
		} 
		catch(Exception ex) {
			System.out.println(ex);
		}
		return encryptString;
	}
	
	public static String decrypt(String crypttext) {
		String plaintext = "";
		
		try {
			byte[] cryptBytes = crypttext.getBytes("ISO-8859-1");
			SecretKeySpec specKey = new SecretKeySpec(KEY, "AES");
			Cipher encryptCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
			encryptCipher.init(Cipher.DECRYPT_MODE, specKey);
			
			byte[] encryptedBytes = null;
			encryptedBytes = encryptCipher.doFinal(cryptBytes);
			plaintext = encryptedBytes.toString();
		}
		catch (Exception ex) {
			System.out.println(ex);
		}
		
		return plaintext;
	}

Wenn ich das jetzt aufrufe über:

Code:
                String x = Crypt.encrypt("Mein Text");
		String y = Crypt.decrypt(x);

Bekomme ich für x sowas raus: [B@a56a7c

Und er schmeißt mir bei decrypt in der Zeile
encryptedBytes = encryptCipher.doFinal(cryptBytes);
die folgende Exception:
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher

Ich hab nachgeschaut, cryptBytes hat ne Länge von 8.


Weiß jetzt leider nicht, wie ich das Problem lösen kann. Irgendwelche Vorschläge?


Danke schon mal,
Sascha
 
byte[]#toString gibt nicht den inhalt des arrays als string zurück, darum kannst du ihn klar nicht entschlüsseln

wenn du einen string verschlüsselst kommt da ein byte[] und kein string raus, wie du schon gemerkt hast. dann aber byte[].toString aufzurufen ist unsinn - wenn überhaupt new String(deinByteArray), aber auch das ist mehr als nur böse.

richtige lösung ist entweder du machst via base64, ... wirklich einen string aus dem byte[] oder du lässt es so als byte[], wieso willst du unbedingt einen string?
 
einzig beim decrypt darfst du
plaintext = encryptedBytes.toString();
mit
plaintext = new String(encryptedBytes, "ISO-8859-1") ersetzen
 
Arg, das mit dem toString() war natürlich Müll.

Vielen Dank für die Hilfe!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben