Hi,
ich möcht nen String verschlüsseln, als String sichern und dann wieder entschlüsseln.
Manchmal klappts auch, oft nicht. Beim Decrypten kommt:
javax.crypto.BadPaddingException: Given final block not properly padded
Soo, der Exception und meinen Suchergebnissen nach muss ich also mit Pattern arbeiten, aber ich hab kein Schimmer wie. Find irgendwie zu Pattern nur Erklärungen um Reguläre Ausdrücke zu überprüfen, aber ich weiß gar nicht wie es aufgebaut sein muss.
ich möcht nen String verschlüsseln, als String sichern und dann wieder entschlüsseln.
Manchmal klappts auch, oft nicht. Beim Decrypten kommt:
javax.crypto.BadPaddingException: Given final block not properly padded
Soo, der Exception und meinen Suchergebnissen nach muss ich also mit Pattern arbeiten, aber ich hab kein Schimmer wie. Find irgendwie zu Pattern nur Erklärungen um Reguläre Ausdrücke zu überprüfen, aber ich weiß gar nicht wie es aufgebaut sein muss.
Code:
package utils;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESCryption {
byte[] key = null;
public AESCryption() {
// AES Schlüssel erzeugen
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
// mit "unlimited strength" security geht auch mehr:
// kgen.init(256);
SecretKey skey = kgen.generateKey();
key = skey.getEncoded();
} catch (Exception e) {
e.printStackTrace();
}
}
public String encrypt(String plain) {
// etwas Verschlüsseln
try {
String plainTextString = plain;
byte[] plainTextBytes = plainTextString.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);
String encryptedString = "";
encryptedString = new String(encryptedBytes);
return encryptedString;
} catch(Exception e) {
e.printStackTrace();
}
return "";
}
public byte[] decrypt(String encryptedString) {
// etwas Entschlüsseln
try {
String encryptedTextString = encryptedString;
byte[] encryptedTextBytes = encryptedTextString.getBytes();
SecretKeySpec specKey = new SecretKeySpec(key, "AES");
Cipher encryptCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
encryptCipher.init(Cipher.DECRYPT_MODE, specKey);
byte[] decryptedBytes = null;
decryptedBytes = encryptCipher.doFinal(encryptedTextBytes);
return decryptedBytes;
} catch(Exception e) {
e.printStackTrace();
}
byte[] empty = {};
return empty;
}
public byte[] getKey() {
return this.key;
}
public String getKeyString() {
String str = new String(this.key);
return str;
}
public void setKey(byte[] key) {
this.key = key;
}
public void setKey(String key) {
this.key = key.getBytes();
}
public static void main(String[] args) {
AESCryption crypt1 = new AESCryption();
byte[] key = crypt1.getKey();
String strKey = new String(key);
String text = "Test 1,2,3,..";
System.out.println(text);
String encrypt = crypt1.encrypt(text);
System.out.println(encrypt);
AESCryption crypt2 = new AESCryption();
crypt2.setKey(strKey);
byte[] decrypt = crypt2.decrypt(encrypt);
System.out.println(new String(decrypt));
}
}