Verschlüsselung

mp89

Mitglied
Hallo,

bin dabei ein Programm zu schreiben für welches der User auch Passwörter braucht. Problem ist jetzt das ich etwas verschlüsseln kann mit der sun.misc.BASE64Encoder aber nicht entschlüsseln. Laut meinem Büchlein was mir dabei hilft existiert für diese Klasse auch keine Dokumentation. Des Weiteren habe ich in "Java ist auch eine Insel" nachgeschaut, etwas gefunden und ausprobiert. Problem war nur, dass nicht das gleiche rauskam, was ich eingegeben hatte.
Hier mal der Quellcode...

Code:
private static String pws(byte[] daten){
        String ausgabe = new String();
        try{
            byte[] bytes1 = daten;
            print(bytes1.toString());
            // buf in String
            String s = new BASE64Encoder().encode( bytes1 );
            System.out.println( s );
            
            print("\n\n");
            // String in byte[]
            BASE64Decoder dec = new BASE64Decoder();
            byte[] buffer = dec.decodeBuffer( s );
            System.out.println(buffer.toString());
            System.out.println( Arrays.equals(bytes1, buffer) );    // true
        }catch (Exception e){}
        return ausgabe;
    }
Was rauskam sah so aus:

run-single:
Bitte geben Sie ihr Passwort ein:
Hallo dies ist ein kleiner Satz....
Passwort wird kodiert...
[B@19821f
SGFsbG8gZGllcyBpc3QgZWluIGtsZWluZXIgU2F0ei4uLi4g



[B@42e816
true

decodiert...
BUILD SUCCESSFUL (total time: 8 seconds)

Kann mir einer helfen, wie ich die Bytes wieder so decodiert bekomme, das auch meine Eingabe wieder herauskommt?

Thx for help!
 
Hallo,

es kommt schon das gleiche raus, aber mit buffer.toString() gibst du nur den Hash-Wert des Arrays aus, nicht den Inhalt. Nimm stattdessen new String(buffer).
 
Verwende lieber nicht die Klasse von sun, die ist aus gutem Grund nicht dokumentiert. Wenn da etwas schief geht, gibt es keine Garantie;)

Wenn es Base64 sein soll, nimm doch einfach die Klasse org.apache.commons.codec.binary.Base64

Und wie "wichtig" ist der Schutz zum verschlüsseln? Also wie zugänglich wird das Programm? Denn ich würde evtl dann eine andere Codierung (md5) wählen, da Base64 so ziemlich das erste ist, was versucht wird, wenn jemand das Passwort hacken will.
 
Und wie "wichtig" ist der Schutz zum verschlüsseln? Also wie zugänglich wird das Programm? Denn ich würde evtl dann eine andere Codierung (md5) wählen, da Base64 so ziemlich das erste ist, was versucht wird, wenn jemand das Passwort hacken will.
Zwei Kleinigkeiten:
Wenn Du schon einen Hash vorschlaegst dann solltest Du
  1. darauf hinweisen dass dies eine Einweg-"Verschluesselung" ist, es also keinen Weg zurueck gibt.
  2. was anderes als das, zwar noch oft genutzte, aber meiner Meinung nach veralte MD5 vorschlagen, z.B. SHA1 (oder noch besser einen der grossen Brueder SHA256 oder gar SHA512).
 
Hallo hallo,

ein guter Verschlüsselungs-Algorithmus sollte generell nicht über einen Algorithmus decodiert werden können. Der Vorgang um ein Passwort zu überprüfen sollte das vom Benutzer eingegebene Passwort verschlüsseln, um dann die beiden verschlüsselten Werte, sprich das in der Datenbank gespeicherte und das vom Benutzer eingegebene verschlüsselte Passwort, zu vergleichen.

Sollte ein Passwort mal abhanden kommen, dann sollte es in Deinem Programm eine Funktion geben ein Passwort zu resetten, also es auf einen Zufallswert oder einen bestimmten Wert zurückzusetzen.

Viele Grüße
Phil
 
1. Base64 ist kein Verschlüsselungsverfahren, sondern eine Möglichkeit Binäre daten auf darstellbare ASCII Zeichen abzubilden. Mit Verschlüsselung hat das N I C H T S zu tun.

2. Es gibt zwei Gründe Passworte zu speichern:
a) ein Passwort Safe um seine eigenen Passwörter nicht zu vergessen. Da sollte man sich an jemanden mit Ahnung wenden, zum Beispiel Bruce Schneier: http://www.schneier.com/passsafe.html
oder wenn man es nicht auf englisch mag: http://passwordsafe.sourceforge.net/nonenglish.shtml

b) Gestohlene Passwörter, die mein verkaufen oder ausnutzen will.

Wenn man eine Anwendung oder ähnliches mit Passworten schützen will, hashed man das Passwort. Aber mit einem Hashalgorithmus, der für diesen Zweck gebaut ist, und NICHT MD5 oder SHA1. Außerdem wird das ganze gesalzen, damit auch Rainbowtables keine Hilfe mehr bringen.

Und das tolle daran: es ist wesentlich einfacher, als obiger Source Code: Java Passwörter ohne MD5 dafür sicher speichern oder direkt bei der Lösung: jbcrypt
 

Neue Beiträge

Zurück