Thema: Verschlüsselung
-
21. 01. 2010, 10:50 #1
Verschlüsselung
Hi,
ich habe diesen Code hier von einem Arbeitskollegen bekommen. Allerdings nutzt er DES, ich würd aber lieber AES nutzen. Gibt es einen Weg das schnell und einfach anzupassen ? Ich habe viel Googlet und Bsp gefunden aber da wird der Algo immer mit angegeben hier finde ich nicht wo der als DES definiert wird.
Wäre jemand so nett mir zuerklären wie ich das änder oder das sogar zu ändern und 1-2 Kommentare anzufügen?
Vielen Dank im Vorraus!
Code:package tmp.security; import java.io.UnsupportedEncodingException; import java.security.spec.AlgorithmParameterSpec; import java.security.spec.KeySpec; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; public class DesEncrypter { private Cipher ecipher; private Cipher dcipher; // 8-byte Salt private byte[] salt = { (byte) 0xA9, (byte) 0x9B, (byte) 0xC8, (byte) 0x32, (byte) 0x56, (byte) 0x35, (byte) 0xE3, (byte) 0x03 }; // Iteration count private int iterationCount = 19; public DesEncrypter(String passPhrase) { try { // Create the key KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount); SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec); ecipher = Cipher.getInstance(key.getAlgorithm()); dcipher = Cipher.getInstance(key.getAlgorithm()); // Prepare the parameter to the ciphers AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount); // Create the ciphers ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec); } catch (java.security.InvalidAlgorithmParameterException e) { } catch (java.security.spec.InvalidKeySpecException e) { } catch (javax.crypto.NoSuchPaddingException e) { } catch (java.security.NoSuchAlgorithmException e) { } catch (java.security.InvalidKeyException e) { } } public String encrypt(String str) { try { // Encode the string into bytes using utf-8 byte[] utf8 = str.getBytes("UTF8"); // Encrypt byte[] enc = ecipher.doFinal(utf8); // Encode bytes to base64 to get a string return new sun.misc.BASE64Encoder().encode(enc); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } return null; } public String decrypt(String str) { try { // Decode base64 to get bytes byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str); // Decrypt byte[] utf8 = dcipher.doFinal(dec); // Decode using utf-8 return new String(utf8, "UTF8"); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (java.io.IOException e) { } return null; } }
-
21. 01. 2010, 11:00 #2HnHnHGast
Re: Verschlüsselung
Programmieren kann der Typ nicht.
http://java.sun.com/j2se/1.5.0/docs/...a.lang.String)SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
ecipher = Cipher.getInstance(key.getAlgorithm());
dcipher = Cipher.getInstance(key.getAlgorithm());
http://java.sun.com/j2se/1.5.0/docs/...uide.html#AppA
-
21. 01. 2010, 11:44 #3
Re: Verschlüsselung
Ach ist das "PBEWithMD5AndDES" der Algo ? Das kam mir solang vor
Was heißt Programmieren kann der Typ nicht? Was ist den falsch in dem Code? Hab leider nix passendes bei Google gefunden das AES nutzt und einen String übergeben bekommt
Aber Danke für die schnelle Antwort!
Geändert von WhiteRabbit89 (21. 01. 2010 um 11:51 Uhr)
-
21. 01. 2010, 11:56 #4Mitglied
- Registriert seit
- May 2009
- Beiträge
- 1.888
Re: Verschlüsselung
-
21. 01. 2010, 12:00 #5satouGast
Re: Verschlüsselung
Bin ich der einzige der sich fragt was für einen Sinn die Methoden vom Typ String mit dem Rückgabewert null haben, oder bin ich blöd?
-
21. 01. 2010, 12:08 #6Mitglied
- Registriert seit
- May 2009
- Beiträge
- 1.888
Re: Verschlüsselung
Ich habe die Frage konkret nicht verstanden (welche Methoden genau?) aber ich vermute mal ins Blaue da kommt es nur auf den "Seiteneffekt" (was die Methode (intern im Objekt) "tut" und nicht was sie zurückliefert) an?
-
21. 01. 2010, 12:12 #7satouGast
Re: Verschlüsselung
Beide String-Methoden (encrypt, decrypt), hätte in dem Fall void nehmen können
-
21. 01. 2010, 12:15 #8
Re: Verschlüsselung
Ich bin gerade zwar komplett raus und verstehe nicht worüber ihr redet aber vielleicht hilft euch das hier:
Die hab ich nicht gespostet weil die ja eigentlich nur zum Testen ist aber eventuell löst das wenigstens euer ProblemCode:package tmp.security; public class StringUtil { public static String encryptString(String str, String passWord) { String retStr = new DesEncrypter(passWord).encrypt(str); return retStr != null ? retStr : str; } public static String decryptString(String str, String passWord) { String retStr = new DesEncrypter(passWord).decrypt(str); return retStr != null ? retStr : str; } public static void main(String[] args) { final String passWord = "Chuck Norris"; String encryptedString = encryptString("Hallo Welt!", passWord); System.out.println("encryptedString: [" + encryptedString + "]"); String decryptedString = decryptString(encryptedString, passWord); System.out.println("decryptedString: [" + decryptedString + "]"); decryptedString = decryptString(encryptedString, "falsches Passwort"); System.out.println("decryptedString: [" + decryptedString + "]"); } }
-
21. 01. 2010, 12:17 #9Mitglied
- Registriert seit
- May 2009
- Beiträge
- 1.888
Re: Verschlüsselung
Da ist mehr als ein return.
Das "leere" return wird nur im Fehlerfall erreicht.
In der "reinen Lehre" des strukturierten Programmierens gerne als schlechter Stil angesehen.
Kann man aber drüber streiten.
Ich benutze es gerne aber im Beispielprogramm zugegeben schlecht zu erkennen.
-
21. 01. 2010, 12:41 #10
Re: Verschlüsselung
Ich bräuchte doch noch etwas Hilfe.
Ich bekomm das einfach nicht auf AES geändert obwohl das eigentlich ja keine große Sache sein dürfte wenn ich mir zB den SampleCode mit AES angucke
Mein größtes Problem ist die Sache mit dem Key bzw dem Passwort was übergeben wird. Ich schaff es irgendwie nicht da nen sinnvollen Ansatz zu "erzeugen" um einfach nur statt DES , AES zu nutzen.
Wenn sich da einer erbarmen könnte und mich vielleicht wenigstens in die Richtung schubsen könnte? (oder sogar schonmal ne kleine Änderung im Code machen könnte?)
-
21. 01. 2010, 13:10 #11HnHnHGast
-
21. 01. 2010, 13:10 #12Mitglied
- Registriert seit
- May 2009
- Beiträge
- 1.888
Re: Verschlüsselung
Kurzform (Mampf!):
http://stackoverflow.com/questions/3...ase-encryption: z.B. BouncyCastle nehmen
oder selber an der PBEKeySpec rumbasteln sodass es zu AES passt:
http://forums.sun.com/thread.jspa?threadID=435545
-
21. 01. 2010, 13:44 #13
Re: Verschlüsselung
Naja noch hab ich das Wissen nicht aber dafür bin ich ja in der Ausbildung um sowas zu lernen
Das Problem ist, dass das Ding recht bald fertig sein sollte. Ich hab mich dafür gemeldet, weil mich das Thema sehr interessiert hat.
Zu dem anderen Punkt: Das ist für ein Internes System von daher wäre das nicht das Problem wenn da jemand helfen würde, das wird sowieso am Ende bevor das ins Projekt fließt von einem anderen Programmierer überprüft.
-
21. 01. 2010, 14:12 #14satouGast
Re: Verschlüsselung
Macht man nicht, steht mit Sicherheit in deinem Arbeits/Ausbildungsvertrag. Meine Firma würde mich im hohem Bogen rauswerfen. Hinzu kommt, Interesse ist eine Sache, aber Cryptographie, wenn auch vorgefertigt, ist kein Kinderspiel.
-
21. 01. 2010, 14:22 #15
Re: Verschlüsselung
ok... ich glaub da hast du Recht satou.
Wenn mans selber macht lernt man ja auch mehr
Habs inzwischen auch geschafft das Key "Zeug" anzupassen.
Jetzt kommt nurnoch das ändern des Ver- und Entschlüsselungsvorgangs und ein paar kleine Änderungen am Salt usw
Ich danke euch allen für die schnelle, und vorallem gute und freundliche Hilfe
-


Zitieren

mehr lesen...







FoWL: Unterstützungserklärung für...
Heute, 12:14 in gulli:news