Hi zusammen,
ich hab hier ein Problem das ich irgendwie nicht hin kriege.
Grundsätzlich will ich eigentlich String verschlüssen (mit Hilfe von Cipher), in Dateien schreiben und später beim Lesen wieder entschlüsseln. Leider funktioniert das nur irgendwie nicht beim entschlüsseln. Ich habe jetzt mal ne kleine Testanwendung gebastelt mit der sich das Problem nachstellen lässt, vielleicht seht ihr den Fehler ja gleich.
Also ich habe eine statische Klasse SKCrypto, die eigentlich nur einen Key generiert und und byte[] ver- und entschlüsseln kann:
In meiner Testklasse mache ich jetzt folgendes um mir die Umwandlungen etwas genauer anzusehen:
Leider funktioniert das Ganze hier für manche Strings, für andere wieder leider nicht. Als Beispiel "mein String" funktioniert und die Ausgaben kommen ohne Fehler. Genauso "Zeil" geht ebenfalls. Versuche ich es jedoch mit "Zeile" bekomme ich folgenden Fehler:
Habe ich vielleicht beim Generieren vom Key irgendwas falsch gemacht? Ich kenne mich an der Stelle leider nicht besonders gut aus. Das Genieriern des Keys habe ich mir aus Beispielen zusammengesucht.
Vielen Dank schon mal für eure Hilfe und eure Mühen.
Gruß
Stefan
ich hab hier ein Problem das ich irgendwie nicht hin kriege.
Grundsätzlich will ich eigentlich String verschlüssen (mit Hilfe von Cipher), in Dateien schreiben und später beim Lesen wieder entschlüsseln. Leider funktioniert das nur irgendwie nicht beim entschlüsseln. Ich habe jetzt mal ne kleine Testanwendung gebastelt mit der sich das Problem nachstellen lässt, vielleicht seht ihr den Fehler ja gleich.
Also ich habe eine statische Klasse SKCrypto, die eigentlich nur einen Key generiert und und byte[] ver- und entschlüsseln kann:
Code:
public class SKCrypto {
public static byte[] decrypt(final byte[] baToDecrypt) {
try {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, generateKey("DES"));
byte[] b = cipher.doFinal(baToDecrypt);
return b;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static byte[] encrypt(final byte[] baToEncrypt) {
try {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, generateKey("DES"));
byte[] b = cipher.doFinal(baToEncrypt);
return b;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static SecretKey generateKey(final String sType) {
byte[] b = {
(byte) 0x2A,
(byte) 0x2A,
(byte) 0x65,
(byte) 0x73,
(byte) 0x4B,
(byte) 0x65,
(byte) 0x79,
(byte) 0x2A
};
try {
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(sType);
return keyFactory.generateSecret(new DESKeySpec(b));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
In meiner Testklasse mache ich jetzt folgendes um mir die Umwandlungen etwas genauer anzusehen:
Code:
public class Test {
public static void main(String[] args) {
try {
String s = "mein String";
System.out.println("s : " + s);
System.out.println("s byte[] : " + s.getBytes());
System.out.println("s byte[] encrypted: " + SKCrypto.encrypt(s.getBytes()));
String n = new String(SKCrypto.encrypt(s.getBytes()));
System.out.println("n : " + n);
System.out.println("n byte[] : " + n.getBytes());
System.out.println("n byte[] decrypted: " + SKCrypto.decrypt(n.getBytes()));
String f = new String(SKCrypto.decrypt(n.getBytes()));
System.out.println("f : " + f);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Leider funktioniert das Ganze hier für manche Strings, für andere wieder leider nicht. Als Beispiel "mein String" funktioniert und die Ausgaben kommen ohne Fehler. Genauso "Zeil" geht ebenfalls. Versuche ich es jedoch mit "Zeile" bekomme ich folgenden Fehler:
Code:
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at resources.util.SKCrypto.decrypt(SKCrypto.java:34)
at test.Test.main(Test.java:18)
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..)
n byte[] decrypted: null
at javax.crypto.Cipher.doFinal(DashoA13*..)
at resources.util.SKCrypto.decrypt(SKCrypto.java:34)
at test.Test.main(Test.java:19)
Habe ich vielleicht beim Generieren vom Key irgendwas falsch gemacht? Ich kenne mich an der Stelle leider nicht besonders gut aus. Das Genieriern des Keys habe ich mir aus Beispielen zusammengesucht.
Vielen Dank schon mal für eure Hilfe und eure Mühen.
Gruß
Stefan