2010-12-14 3 views
5

Ich benutze Postgresql, Hibernate und Java und ich muss ein Passwort speichern. Kann mir jemand vorschlagen, wie man das Passwort mit md5 verschlüsselt? Sonst gibt es eine bessere Möglichkeit, sicheres Passwort in der Datenbank zu speichernPasswort mit Md5 speichern

Dank

+0

Wenn Sie ein Passwort mit MD5 (oder einem anderen Hash-Algorithmus) verschleiern, ist es nicht möglich, das Original-Passwort zu kommen. Dies ist jedoch möglicherweise nicht notwendig - oft müssen Sie nur prüfen, ob das eingegebene Passwort mit dem gespeicherten identisch ist. In diesem Fall können Sie das MD5 (oder einen anderen Hash) berechnen und sehen, ob Sie das bekommen das gleiche wie was gespeichert ist. Wenn Sie jedoch das Kennwort verwenden möchten, um sich beispielsweise bei einer Datenbank anzumelden, benötigen Sie das ursprüngliche Kennwort, und MD5 ist nicht das, was Sie möchten. (BTW MD5 gilt als gebrochen, also am besten einen anderen Algorithmus wählen!) – psmears

+0

Sie können nicht „entschlüsseln“ Hash-Wert von md5 in irgendeiner Art und Weise hergestellt, zumindest vorerst. Wenn du könntest, würdest du es im Grunde "brechen". MD5 ist ein kryptographischer Hash-Funktionen: http://en.wikipedia.org/wiki/Cryptographic_hash_function –

+3

*** DO NOT USE MD5 FÜR PASSWÖRTER *** –

Antwort

9

Sie nicht md5 für Passwort-Hashing verwendet werden sollen. Es ist für Geschwindigkeit gebaut, die es leichter macht anzugreifen. Verwenden Sie stattdessen bcrypt. Außerdem sollten Sie nicht versuchen, das Passwort nach der Speicherung zu entschlüsseln. In den Beispielen auf der bcrypt-Seite erfahren Sie, wie Sie ein Passwort anhand von Benutzereingaben überprüfen können. Mehr information zum sicheren Speichern von Passwörtern.

jBcrypt ist wirklich einfach zu bedienen. Hier ist, wie Sie ein Passwort-Hash:

BCrypt.hashpw(password_from_user, BCrypt.gensalt()); 

Und es zu überprüfen:

BCrypt.checkpw(password_from_user, hashed_password_from_database) 
+1

Können Sie erklären, warum nicht md5 oder sha1 verwenden, da dies eine übliche Methode ist? – JOTN

+0

Der letzte Link erklärt alles. – dagge

+0

Das funktioniert nur, bis jemand einen FastBcrypt erstellt, wie es mit dem alten Unix-Hash-Algorithmus passiert ist. – JOTN

5

MD5 ist kein encryption algorithm - es ist ein cryptographic hash function ist. Das ist sehr anders! Sie können das Hash-Passwort in der Datenbank speichern, aber Sie können das Passwort im Allgemeinen nicht aus dem Hash des Passworts wiederherstellen. Dies ist von Entwurf.

In einigen Fällen ist es ist möglich, das Passwort wieder aus dem Hash zu bekommen - zum Beispiel, wenn das Passwort ein Wort aus dem Wörterbuch ist es mit einem dictionary attack gestellt werden kann. Wenn das Kennwort kurz genug ist und ein Zeichen aus einem begrenzten Bereich verwendet, kann ein brute force oder rainbow table Angriff das Kennwort wiederherstellen. Wenn Sie ein Hash-Passwort speichern, sollten Sie eine salt und key strengthening (zum Beispiel PBKDF2) verwenden, um diese Angriffe zu erschweren.

Sie sollten sich darüber im Klaren sein, dass MD5 als defekt gilt und es nicht empfohlen wird, es für neue Anwendungen zu verwenden. Es gibt bessere Alternativen, zum Beispiel SHA-256.

+0

Einverstanden. Meiner Meinung nach sollte SHA-256 auf salt + password für 99,9% der Anwendungen ausreichen. – cherouvim

2

Wenn Sie einen Hashalgorithmus verwenden, entschlüsseln Sie das Kennwort nicht (können nicht). Sie hash das Passwort und speichern Sie den Hash. Wenn der Benutzer in Zukunft sein Kennwort angibt, hashst du es mit demselben Algorithmus und vergleichst den neuen Hash mit dem, was du zuvor gespeichert hast.

Sie können die Klasse MessageDigest in Java verwenden, um einen Wert zu hashen. Ref: Get MD5 hash in a few lines of Java.

Edit: Auch ich stimme den anderen zu, die sagen, MD5 dafür nicht mehr zu verwenden. Es ist ein alter Algorithmus, der früher üblich war, aber bis zur Wertlosigkeit (für Passwörter) angegriffen wurde. Es gibt alle Arten von Ressourcen online für MD5 Reverse Lookup.

0

Sie können es in Postgres tun, wenn Sie das pgcrypto Contrib-Modul installieren.

Sie können dann verschlüsselt Passwörter wie folgt aus:

update ... set passwordhash = crypt('new password', gen_salt('md5')); 

Natürlich kann man es gar nicht entschlüsseln kann!

Wie andere darauf hingewiesen haben, kann dies eine schlechte Idee sein, je nachdem, was Sie versuchen zu tun. Ich war schon vorher gezwungen, MD5 zu benutzen, weil eine andere Anwendung es verlangt hat, aber Sie möchten diesen Hash nicht in die Welt übertragen.

+1

Ich würde nicht empfehlen, eine DBMS-spezifische Lösung mit Hibernate zu verwenden. Portabilität zwischen Datenbanken ist ein großer Vorteil für die Verwendung. – JOTN

+0

@JOTN Danke, das ist interessant zu wissen. –

2

1) Es gibt keine decrypt für MD5.
2) MD5 ist eine alte Technologie, die sich hervorragend zum Prüfen eignet, ob zwei Strings gleich sind.
3) MD5 unterliegt Wörterbuchangriffen.
4) MD5 kann durch Verwendung eines Salzes sicherer gemacht werden.
5) Wir verwenden MD5 für Low-Level-Sicherheit, da der Hash einfach plattformübergreifend dupliziert werden kann. (C++, VB.net, VB6, C#, PHP ...)

0

Ich habe die Jasypt Verschlüsselungsbibliothek gefunden, um ziemlich nützlich zu sein.