Ergebnis 1 bis 15 von 15
  1. #1
    Wei(s)ser Hase Avatar von WhiteRabbit89
    Registriert seit
    Oct 2008
    Ort
    Köln
    Beiträge
    678

    Standard 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;
    	}
    }

  2. #2
    HnHnH
    Gast

    Standard Re: Verschlüsselung

    Programmieren kann der Typ nicht.

    Zitat Zitat von WhiteRabbit89 Beitrag anzeigen
    hier finde ich nicht wo der als DES definiert wird
    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/...a.lang.String)
    http://java.sun.com/j2se/1.5.0/docs/...uide.html#AppA

  3. #3
    Wei(s)ser Hase

    (Threadstarter)

    Avatar von WhiteRabbit89
    Registriert seit
    Oct 2008
    Ort
    Köln
    Beiträge
    678

    Standard 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)

  4. #4
    Mitglied
    Registriert seit
    May 2009
    Beiträge
    1.888

  5. #5
    satou
    Gast

    Standard 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?

  6. #6
    Mitglied
    Registriert seit
    May 2009
    Beiträge
    1.888

    Standard 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?

  7. #7
    satou
    Gast

    Standard Re: Verschlüsselung

    Beide String-Methoden (encrypt, decrypt), hätte in dem Fall void nehmen können

  8. #8
    Wei(s)ser Hase

    (Threadstarter)

    Avatar von WhiteRabbit89
    Registriert seit
    Oct 2008
    Ort
    Köln
    Beiträge
    678

    Standard Re: Verschlüsselung

    Ich bin gerade zwar komplett raus und verstehe nicht worüber ihr redet aber vielleicht hilft euch das hier:
    Code:
    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 + "]");
    	}
    }
    Die hab ich nicht gespostet weil die ja eigentlich nur zum Testen ist aber eventuell löst das wenigstens euer Problem

  9. #9
    Mitglied
    Registriert seit
    May 2009
    Beiträge
    1.888

    Standard 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.

  10. #10
    Wei(s)ser Hase

    (Threadstarter)

    Avatar von WhiteRabbit89
    Registriert seit
    Oct 2008
    Ort
    Köln
    Beiträge
    678

    Standard 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?)

  11. #11
    HnHnH
    Gast

    Standard Re: Verschlüsselung

    Zitat Zitat von WhiteRabbit89 Beitrag anzeigen
    (oder sogar schonmal ne kleine Änderung im Code machen könnte?)
    Ist Dein Chef sicher, dass Du das machen solltest und bist Du Dir sicher, dass Du dem gewachsen bist? Ich würde keinen sicherheitsrelevanten Code von Fremden anpassen lassen.

    Was hast Du denn probiert und welche Fehler kamen?

  12. #12
    Mitglied
    Registriert seit
    May 2009
    Beiträge
    1.888

    Standard 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

  13. #13
    Wei(s)ser Hase

    (Threadstarter)

    Avatar von WhiteRabbit89
    Registriert seit
    Oct 2008
    Ort
    Köln
    Beiträge
    678

    Standard Re: Verschlüsselung

    Zitat Zitat von HnHnH Beitrag anzeigen
    Ist Dein Chef sicher, dass Du das machen solltest und bist Du Dir sicher, dass Du dem gewachsen bist?
    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.

  14. #14
    satou
    Gast

    Standard 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.

  15. #15
    Wei(s)ser Hase

    (Threadstarter)

    Avatar von WhiteRabbit89
    Registriert seit
    Oct 2008
    Ort
    Köln
    Beiträge
    678

    Standard 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

  16.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •