RoR - MD5 Generation

76

Wie kann ich eine Zeichenfolge mit MD5 in Rails 3.0 verschlüsseln? pass = MD5.hexdigest(pass) in einem Modell ergibtuninitialized constant MyModel::MD5

Mithun Sreedharan
quelle
3
Vielleicht möchten Sie in diesem Beitrag nachlesen,
Mike Buckbee
Ein Punkt der Terminologie: Hashing, z. B. unter Verwendung des MD5-Algorithmus, ist keine Verschlüsselung . Sie verschlüsseln etwas, wenn Sie es auch entschlüsseln möchten . Normalerweise können Sie die ursprüngliche Nachricht nicht aus einem Hash ermitteln, und oft ist dies genau der Punkt, an dem Sie einen Hashing-Algorithmus verwenden.
Verwirrung

Antworten:

176

Sie können dies Digest::MD5aus der Ruby-Standardbibliothek verwenden.

irb(main):001:0> require 'digest/md5'
=> true
irb(main):002:0> Digest::MD5.hexdigest('foobar')
=> "3858f62230ac3c915f300c664312c63f"

Und noch etwas: MD5 ist ein Hash-Algorithmus. Sie "verschlüsseln" nichts mit einem Hash-Algorithmus.

Joschi
quelle
15
Noch etwas: MD5 ist im Grunde genommen kaputt (im kryptografischen Sinne) und sollte nicht mehr verwendet werden. Wenn Sie ein neues Softwareprojekt starten, verwenden Sie einen stärkeren Hash-Algorithmus wie SHA512 oder bcrypt und vergessen Sie nicht, Ihren Passwörtern ein Salz hinzuzufügen, bevor Sie sie hashen.
Joschi
8
MD5 ist aus kryptografischen Gründen defekt, kann jedoch weiterhin zum Vergleichen von Dateien verwendet werden. Git benutzt es immer noch. ABER HASH PASSWÖRTER NICHT MIT MD5
AlexQueue
2
Git verwendet SHA1 für fast alle Hashing-Anforderungen.
Joschi
2
Wenn Sie ein Kennwort für die Speicherung in der Datenbank haben, verwenden Sie bcrypt und nicht MD5. Beide sind als Ruby-Bibliotheken verfügbar und aus Sicht der Implementierung sind beide gleich einfach. In dem unwahrscheinlichen Fall, dass Ihre Datenbank kompromittiert wird (was der springende Punkt beim Hashing des Kennworts vor der Speicherung ist), ist bcrypt schwieriger zu knacken als md5 immer eine bessere Wahl. Vergessen Sie nicht, ein Salz hinzuzufügen.
lms