Es gibt viele MD5-JavaScript-Implementierungen. Weiß jemand, welches am weitesten fortgeschritten, am fehlerhaftesten und am schnellsten ist?
Ich brauche es für dieses Tool.
javascript
performance
md5
powtac
quelle
quelle
Antworten:
Ich habe gehört, dass Josephs Myers-Implementierung ziemlich schnell ist. Zusätzlich hat er einen langen Artikel über die Javascript-Optimierung, in dem er beschreibt, was er beim Schreiben seiner Implementierung gelernt hat. Es ist eine gute Lektüre für alle, die sich für performantes Javascript interessieren.
http://www.webreference.com/programming/javascript/jkm3/
Seine MD5-Implementierung finden Sie hier
quelle
var add32
Online-add32
Gabel 185 sein sollte, damit ich die beste Gabel fand, die ich konnte, und sie auf diese neue Version aktualisiert habe: gist.github.com/MichaelPote/3f0cefaaa9578d7e30beIch würde vorschlagen, dass Sie in diesem Fall CryptoJS verwenden.
Grundsätzlich ist CryptoJS eine wachsende Sammlung von standardmäßigen und sicheren kryptografischen Algorithmen, die in JavaScript unter Verwendung von Best Practices und Mustern implementiert werden. Sie sind schnell und haben eine konsistente und einfache Oberfläche.
Wenn Sie also den MD5-Hash Ihrer Kennwortzeichenfolge berechnen möchten, gehen Sie wie folgt vor:
Dieses Skript sendet also den Hash Ihrer Kennwortzeichenfolge an den Server.
Weitere Informationen und Unterstützung zu anderen Hash-Berechnungsalgorithmen finden Sie unter:
http://code.google.com/p/crypto-js/
quelle
Bei der Auswahl der Bibliothek ist es auch wichtig zu prüfen, ob sie moderne Frameworks wie Bower unterstützt, jslint übergibt, das Plugin-Modell für JQuery oder Modulsysteme wie AMD / RequireJS unterstützt, zusätzlich zur aktiven Entwicklung und mit mehr als 1 Mitwirkenden. Es gibt einige Optionen, die einige oder alle dieser zusätzlichen Kriterien erfüllen:
Beispiel aus CryptoJS:
Es gibt einen Leistungsvergleich zwischen den oben genannten Bibliotheken unter http://jsperf.com/md5-shootout/7 . Auf meiner Maschine zeigen aktuelle Tests (die zugegebenermaßen alt sind), dass Spark MD5 die beste Wahl ist, wenn Sie nach Geschwindigkeit suchen (und ebenso einfacher JKM-Code). Wenn Sie jedoch nach einer umfassenderen Bibliothek suchen, ist CryptoJS die beste Wahl, obwohl es 79% langsamer als Spark MD5 ist. Ich würde mir jedoch vorstellen, dass CryptoJS irgendwann die gleiche Geschwindigkeit erreichen würde, da es ein etwas aktiveres Projekt ist.
quelle
quelle
Ich habe eine Reihe von Artikeln zu diesem Thema gefunden. Sie alle schlugen die Umsetzung von Joseph Meyers vor.
Siehe: http://jsperf.com/md5-shootout zu einigen Tests
Auf meiner Suche nach der ultimativen Geschwindigkeit habe ich mir diesen Code angesehen und festgestellt, dass er verbessert werden kann. Also habe ich ein neues JS-Skript erstellt, das auf dem Joseph Meyers-Code basiert.
Siehe Verbesserter Jospeh Meyers-Code
quelle
Derzeit die schnellste Implementierung von md5 (basierend auf dem Code von Joseph Myers):
https://github.com/iReal/FastMD5
jsPerf Vergleich: http://jsperf.com/md5-shootout/63
quelle
Ich muss nur HTML5-Browser unterstützen, die typisierte Arrays unterstützen (DataView, ArrayBuffer usw.). Ich glaube, ich habe den Joseph Myers-Code genommen und ihn so geändert, dass er die Übergabe eines Uint8Array unterstützt. Ich habe nicht alle Verbesserungen festgestellt, und es gibt wahrscheinlich noch einige char () - Array-Artefakte, die verbessert werden können. Ich brauchte dies, um es dem PouchDB-Projekt hinzuzufügen.
quelle
txt = ''
bedeutet eigentlich?Ich habe Tests geschrieben, um mehrere JavaScript-Hash-Implementierungen zu vergleichen, einschließlich der meisten hier erwähnten MD5-Implementierungen. Um die Tests auszuführen, gehen Sie zu http://brillout.github.io/test-javascript-hash-implementations/ und warten Sie etwas.
Es scheint, dass die YaMD5- Implementierung der Antwort von R. Hill die schnellste ist.
quelle
Es hat mich gestört, dass ich keine Implementierung finden konnte, die sowohl schnell ist als auch Unicode-Zeichenfolgen unterstützt.
Also habe ich eine erstellt, die Unicode-Zeichenfolgen unterstützt und (zum Zeitpunkt des Schreibens) immer noch schneller ist als die derzeit schnellsten Implementierungen von Nur-ASCII-Zeichenfolgen:
https://github.com/gorhill/yamd5.js
Basierend auf dem Code von Joseph Myers, verwendet jedoch TypedArrays und andere Verbesserungen.
quelle
Nur zum Spaß,
Dieser ist 42 Zeilen lang, passt horizontal in 120 Zeichen und sieht gut aus. Ist es schnell Nun - es ist schnell genug und ungefähr das gleiche wie alle anderen JS-Implementierungen.
Ich wollte nur etwas, das in meiner Datei helpers.js nicht hässlich aussieht und meinen SublimeText nicht mit 20 Meilen langen minimierten Einzeilern verlangsamt.
Also hier ist mein Lieblings-MD5.
Aber wirklich, ich habe es nur aus ästhetischen Gründen gepostet. Außerdem sind es mit den Kommentaren genau 4000 Bytes. Bitte fragen Sie nicht warum. Ich kann keine richtige Erklärung für mein Verhalten bei Zwangsstörungen / Rebellen finden. Danke auch Paul Johnston, danke Greg Holt. (Randnotiz: Ihr habt ein paar var- Schlüsselwörter weggelassen, also habe ich mir erlaubt, sie hinzuzufügen.)
quelle
Node.js verfügt über eine integrierte Unterstützung
Das obige Code-Snippet berechnet die MD5-Hex-Zeichenfolge für die Zeichenfolge
hello world
Der Vorteil dieser Lösung ist, dass Sie keine zusätzliche Bibliothek installieren müssen.
Ich denke, eingebaute Lösung sollte die schnellste sein. Wenn nicht, sollten wir issue / PR für das Node.js-Projekt erstellen.
quelle
js-md5 unterstützt UTF-8-String, Array, ArrayBuffer, AMD ....
und schnell. jsperf
quelle
Vielleicht war dieses Paket nützlich
https://www.npmjs.com/package/pure-md5
quelle
Warum versuchen Sie es nicht mit http://phpjs.org/functions/md5/ ?
Leider ist die Leistung bei jedem emulierten Skript begrenzt, dies kann jedoch echten MD5-Hash rendern. Obwohl ich davon abraten würde, md5 für Passwörter zu verwenden, da es sich um einen schnell gerenderten Hash handelt.
quelle
Viel schnelleres Hashing sollte durch Berechnen auf einer Grafikkarte möglich sein (Hashing-Algorithmus in WebGL implementieren), wie dort über SHA256 erläutert: Ist es möglich, sha256-Hashes im Browser mithilfe der Grafikkarte des Benutzers zu berechnen, z. mit WebGL oder Flash?
quelle
Sie können auch meine md5-Implementierung überprüfen . Es sollte ca. sein. das gleiche wie das andere oben gepostet. Leider ist die Leistung durch die innere Schleife begrenzt, die nicht mehr optimiert werden kann.
quelle
Wenn die Leistung Ihrer Anwendung durch eine Javascript-Implementierung von MD5 eingeschränkt wird, machen Sie wirklich etwas falsch. Betrachten Sie eine architektonische Änderung (Hinweis: Verwenden Sie MD5 seltener)
quelle