Verschlüsselung in Java

FIAE10

Grünschnabel
Moin,

ich habe eine Klasse geschrieben, welche mir einen String ver- und entschlüsseln soll.
Das verschlüsseln klappt soweit gut nur beim entschlüsseln erhalte ich folgende
Exception:

Java:
javax.crypto.BadPaddingException: Given final block not properly padded

Java:
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class CryptHelper {

	private static String key = "0123456789012345";
	
	public static String encryptString(String text) {
		try {
			Key secretKey = new SecretKeySpec(key.getBytes(), "AES");
		    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		   
		    byte[] encrypted = text.getBytes("UTF-8");
		    
		    cipher.init(Cipher.ENCRYPT_MODE, secretKey);
		    
		    byte[] encryptBytes = cipher.doFinal(encrypted);
		    String encryptString = new String(encryptBytes);
			
			return encryptString;
		
		} catch (Exception e) {
			System.out.println("encrypt failed");
		}
		return text;

	}
	
	public static String decryptString(String text) {
		try {
			
			Key secretKey = new SecretKeySpec(key.getBytes(), "AES"); 
			Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
		    cipher.init(Cipher.DECRYPT_MODE, secretKey);
		    byte[] decryptBytes = cipher.doFinal(text.getBytes());
		    String decryptString = new String(decryptBytes,"UTF-8");
		    
			return decryptString;
		
		} catch (Exception e) {
			System.out.println("decrypt failed");
		}
		return text;
	}
}

Danke schon mal für die Hilfe
 
Das Problem ist, dass Du die verschlüsselten Bytes in einen String umwandelst (Zeile 19 und 36). Entweder arbeitest Du direkt mit dem byte-Array od. Du wandelst das byte-Array in einen HEX-String um (zB mit Apache Commons Codec).
 
Das Problem ist auch in Zeile 11. getBytes holt die Bytes des Strings in dem Standard-Zeichensatz des Betriebssystems. Hier sollte man eins fest definieren.
 
Zurück