Passwort verschlüsseln

internet

Top Contributor
Hallo,
ich habe folgendes Problem:

ich habe eine Anwendung geschrieben.
Datenbank ist MySql.

Bisher wird das Passwort eines Users unverschlüsselt in die Datenbank geschrieben.
Nun möchte ich gerne eine Methode schreiben, die mir das Passwort verschlüsselt.
Und ich dieses verschlüsselte Passwort dann in die Datenbank schreibe.

Zudem benötige ich dann auch eine Methode, die das Passwort wieder umwandelt (beim einloggen zB)

Gibt es hierfür irgendwelche vorgefertigten Methoden?
MfG
 
T

Tomate_Salat

Gast
die mir das Passwort verschlüsselt.
Und ich dieses verschlüsselte Passwort dann in die Datenbank schreibe.

[c]INSERT INTO users (user,pass) VALUES ('foo',md5('bar'))[/c]

oder MD5 in Java nachschreiben. Unter google findest du fertige algorythmen dazu

Zudem benötige ich dann auch eine Methode, die das Passwort wieder umwandelt (beim einloggen zB)

Falscher weg: verschlüssel das Passwort beim Login auch als MD5 und prüfe diese 32-Stelligen Zeichenketten gegeneinander

Anmerkung
[c]SELECT md5( "hallo" )[/c] => bekommst du den md5-code von "hallo". Würde aber zum gegenprüfen lieber den MD5-code im Java erstellen.

Anmerkung2
Ja EikeB hat meins schön ergänzt. Natürlich prüfst du das am geschicktesten im
[c]SELECT * from user WHERE user = md5('foo')[/c]
zu SHA1 kann ich nix sagen. Ich Benutze hierfür gerne md5

MFG

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:

Foermchen82

Top Contributor
Das Passwort jetzt verschlüsselt in die DB zu schreiben ist schon mal Prima!!

Ein Passwort verschlüsselt in die DB zu schreiben und dann wieder entschlüsseln zu wollen ist auch nicht ganz so toll. Denn die Anwendung sollte eigentlich nie die Möglichkeit haben dir dein PW zu entschlüsseln. Das ist immer ein Sicherheitsleck.
Besser ist folgender Ansatz:

Bilde aus deinem PW einen Hash, den du in die DB schreibst. Die Eingabe des Users wandelst du dann auch in einen Hash um und vergleichst die beiden Hashs. Somit bekommst du einen Verschlüsselte Prüfmöglichkeit.
 
G

Gast2

Gast
Hi,
du könntest das Passwort als SHA1 Hash abspeichern. Da bietet dir MySQL schon fertige Methoden an.

Code:
"INSERT INTO users (user, pw) VALUES ('username', SHA1('meingeheimespasswort'));"
(hoffe die Syntax passt)

Wenn du jetzt beim einloggen prüfen willst ob das pw korrekt ist erstellt du wieder einen SHA1 Hash und vergleichst diesen mit dem in der DB.

Code:
"SELECT user FROM users WHERE pw = SHA1('meingeheimespasswort');"

Hoffe das hilft dir weiter.

EDIT: zu langsam...
 

Blakh

Bekanntes Mitglied
Als Alternative zum SQL von meinen Vorpostern hier mal ein Beispiel mit dem SHA-256 Algorithmus zum Bilden eines Hashs in JAVA. Natürlich gibt es da noch mehr Algorithmen die MessageDigest unterstützt.

Java:
import java.security.MessageDigest;

MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(passwort);
byte[] hash = md.digest()
 
Zuletzt bearbeitet:

Niki

Top Contributor
Hier der Code für MD5 Verschlüsselung:

//EDIT da hab ich noch was vergessen
Java:
    private static final char[] hexChars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    public static String digest(String s) throws NoSuchAlgorithmException{
      MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] b = md.digest(s.toUpperCase().getBytes());
        
        return hexStringFromBytes(b);
    }

    private static String hexStringFromBytes(byte[] b) {
        String hex = "";
        int msb;
        int lsb = 0;
        int i;

        // MSB maps to idx 0

        for (i = 0; i < b.length; i++) {

            msb = ((int) b[i] & 0x000000FF) / 16;

            lsb = ((int) b[i] & 0x000000FF) % 16;
            hex = hex + hexChars[msb] + hexChars[lsb];
        }
        return (hex);
    }
 
Zuletzt bearbeitet:
G

Gast2

Gast
Das war auch nur als Beispiel gedacht. MySQL sollte auch den Befehl SHA2() kennen, kannst du dann einfach ersetzen ;)
 
T

Tomate_Salat

Gast
wieso sollte SHA 2 den deutlich besser sein? Oo. Ich weis nicht welche besser ist, aber ich bezweifle, dass es da einen deutlichen Unterschied gibt.
 

internet

Top Contributor
was ist denn allgemein besser:

das über die Datenbank überprüfen und ein insert darüber zu machen?

Oder eben eine Methode in JAVA zu schreiben?
 

Blakh

Bekanntes Mitglied
Hm ... ich bin kein Experte darin, aber ich denke, dass ist Geschmackssache. Wenn du das per insert machst, hat der Datenbankserver die Last, wenn du es per Methode machst, dann der Client.
 

internet

Top Contributor
habe hier eine Methode gefunden:
passt das so?
Warum ein String-Array als Parameter?


Java:
import java.security.*;
 
public class cryptotest {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        MessageDigest md;
        String message = "password";
        try {
            md= MessageDigest.getInstance("SHA-512");
 
            md.update(message.getBytes());
            byte[] mb = md.digest();
            String out = "";
            for (int i = 0; i < mb.length; i++) {
                byte temp = mb[i];
                String s = Integer.toHexString(new Byte(temp));
                while (s.length() < 2) {
                    s = "0" + s;
                }
                s = s.substring(s.length() - 2);
                out += s;
            }
            System.out.println(out.length());
            System.out.println("CRYPTO: " + out);
 
        } catch (NoSuchAlgorithmException e) {
            System.out.println("ERROR: " + e.getMessage());
        }
    }
}
 

Niki

Top Contributor
ungetestet:
Java:
public static String digest(String message) throws NoSuchAlgorithmException {
        MessageDigest md;
        String out = "";
      
            md= MessageDigest.getInstance("SHA-512");
 
            md.update(message.getBytes());
            byte[] mb = md.digest();
            
            for (int i = 0; i < mb.length; i++) {
                byte temp = mb[i];
                String s = Integer.toHexString(new Byte(temp));
                while (s.length() < 2) {
                    s = "0" + s;
                }
                s = s.substring(s.length() - 2);
                out += s;
            }          
 
        
        return out;
}
 

internet

Top Contributor
prima!
Klappt.
Eine Frage noch:
muss die Methode UNBEDINGT static sein?
Da ich die Methode in einer anderen Bean aufrufe, als in der die Funktion ist.
 

Wortraum

Bekanntes Mitglied
wieso sollte SHA 2 den deutlich besser sein? Oo. Ich weis nicht welche besser ist, aber ich bezweifle, dass es da einen deutlichen Unterschied gibt.
Auf Anhieb fallen mir drei Gründe ein:
1) SHA2 kann größere Datenmengen verarbeiten.
2) SHA2 kann Streuwerte in vier verschiedenen Längen erzeugen.
3) Von SHA2 wird nicht abgeraten, und es gibt noch keine bekannte Möglichkeit, die Kollisionsberechnung so weit zu vereinfachen, daß sie für die Praxis bereits am Horizont zu erkennen ist.

Solang man nur den Streuwert speichert, egal ob nun MD5, SHA1 oder SHA2, ist es aber sowieso egal, da kann man auch Klartext nehmen. Gegen Angriffe mittels Regenbogentabellen ist mindestens noch Salz oder eine ordentlich Anzahl Iterationen notwendig. Außerdem möchte man eigentlich nicht, daß gleiche Kennwörter zweier Benutzer sofort am gleichen Streuwert erkennbar sind.

Also das Kennwort nehmen, ein wenig salzen mit Benutzername oder, besser noch, einer zufälligen Zeichenkette, das ganze hübsch durch SHA2 jagen, je nach Belieben auch 5000 mal, und dann ab damit in die Datenbank. :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Passwort verschlüsseln - Wo Allgemeine Java-Themen 2
Z Passwort Versuche speichern Allgemeine Java-Themen 8
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
J Passwort Manager Allgemeine Java-Themen 15
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
F Best Practice Passwort Recovery - Schulbeispiel Allgemeine Java-Themen 4
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
O verschlüsseltes Passwort ablegen Allgemeine Java-Themen 12
G Unix Passwort mit Java ändern? Allgemeine Java-Themen 3
OnDemand Passwort entschlüsseln Allgemeine Java-Themen 8
S Random Passwort für den User + Hashen Allgemeine Java-Themen 6
W Passwort Clientseitig sicher ablegen ohne Hash Allgemeine Java-Themen 2
DStrohma Passwort in Datei speichern - wie? Allgemeine Java-Themen 31
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
R Windows - User Passwort ändern Allgemeine Java-Themen 2
B "Verschlüsselung" mit Passwort (XOR bzw. Modulo) Allgemeine Java-Themen 7
S Erstellung einer verschlüsselten Passwort Datei Allgemeine Java-Themen 11
R Programm soll warten bis eine Passwort eingabe gemacht wurde. Allgemeine Java-Themen 6
J TrueZip - Passwort bei Zipfile Allgemeine Java-Themen 13
padde479 zip mit Passwort Allgemeine Java-Themen 2
H root-Passwort übergeben Allgemeine Java-Themen 28
S Passwort geschützte Excel Datei öffnen (POI) Allgemeine Java-Themen 4
G Blind-Datei (Passwort auslesen) Allgemeine Java-Themen 5
C Passwort sicher speichern Allgemeine Java-Themen 5
P Passwort lokal speichern Allgemeine Java-Themen 5
F Passwort hash Allgemeine Java-Themen 8
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
S .rar-Dateien ein Passwort als Parameter übergeben Allgemeine Java-Themen 5
J Passwort(String) ---> SecretKey(Spec) Allgemeine Java-Themen 6
T jxl Passwort Allgemeine Java-Themen 3
P URL mit htaccess in Explorer öffnen (ohne user-passwort) Allgemeine Java-Themen 6
B Passwort verwenden ohne dass es im Quelltext steht Allgemeine Java-Themen 24
E TextField/Passwort Allgemeine Java-Themen 5
F Java Passwort abfrage Allgemeine Java-Themen 2
D sicheres hardgecodetes passwort? Allgemeine Java-Themen 18
G Zip Datei - Passwort schützen Allgemeine Java-Themen 13
T Verschlüsseln Allgemeine Java-Themen 18
C Email mit public-key verschlüsseln Allgemeine Java-Themen 0
J Interpreter-Fehler Fehler beim Verschlüsseln Invalid AES key length Allgemeine Java-Themen 1
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
vandread Daten verschlüsseln mit Java oder Datenbank Allgemeine Java-Themen 15
Bluedaishi Jar Datei Sichern bzw Verschlüsseln !!!!!! Allgemeine Java-Themen 47
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
T In Java String sicher verschlüsseln Allgemeine Java-Themen 6
A Texte mit .pem datei Verschlüsseln Allgemeine Java-Themen 6
D Nur Teile einer Datei symetrisch Verschlüsseln Allgemeine Java-Themen 4
F Verschlüsseln, aber welcher Algo Allgemeine Java-Themen 29
K ByteBuffer verschlüsseln Allgemeine Java-Themen 14
F Internet Verbindung verschlüsseln Allgemeine Java-Themen 17
L Logindaten verschlüsseln Allgemeine Java-Themen 3
calzone Passwortabfrage, Verschlüsseln wie realisieren ? Allgemeine Java-Themen 3
T Datei beim schreiben verschlüsseln beim lesen entschlüsseln Allgemeine Java-Themen 11
G XML- Datei verschlüsseln Allgemeine Java-Themen 13
G Arbeitsspeicher verschlüsseln Allgemeine Java-Themen 25
R Verschlüsseln Allgemeine Java-Themen 3
J Java - ent/verschlüsseln Allgemeine Java-Themen 20
zilti Code verschlüsseln Allgemeine Java-Themen 17
H strings in datei verschlüsseln , auslesen mit klartext aber! Allgemeine Java-Themen 2
B In Java verschlüsseln - mit C# entschlüsseln Allgemeine Java-Themen 7
P JavaCode verschlüsseln / verschlüsselte Werte Allgemeine Java-Themen 3
sparrow Datenbestand verschlüsseln Allgemeine Java-Themen 3
S Datei Verschlüsseln Allgemeine Java-Themen 6
G Properties Datei verschlüsseln. WIE? Allgemeine Java-Themen 6
G class datein verschlüsseln Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben