Istnieje wiele implementacji JavaScript MD5. Czy ktoś wie, który jest najbardziej zaawansowany, najbardziej naprawiony i najszybszy?
Potrzebuję tego do tego narzędzia.
javascript
performance
md5
powtac
źródło
źródło
Odpowiedzi:
Słyszałem, że implementacja Myers Josepha jest dość szybka. Dodatkowo ma obszerny artykuł na temat optymalizacji Javascript, opisujący czego się nauczył podczas pisania swojej implementacji. Jest to dobra lektura dla wszystkich zainteresowanych wydajnym javascript.
http://www.webreference.com/programming/javascript/jkm3/
Jego implementację MD5 można znaleźć tutaj
źródło
var add32
on-line 185 powinien być właśnieadd32
dlatego znalazłem najlepszy widelec, jaki mogłem i zaktualizowałem go do nowej wersji: gist.github.com/MichaelPote/3f0cefaaa9578d7e30beSugerowałbym użycie CryptoJS w tym przypadku.
Zasadniczo CryptoJS to rosnąca kolekcja standardowych i bezpiecznych algorytmów kryptograficznych implementowanych w JavaScript z wykorzystaniem najlepszych praktyk i wzorców. Są szybkie i mają spójny i prosty interfejs.
Więc jeśli chcesz obliczyć skrót MD5 swojego hasła, wykonaj następujące czynności:
Więc ten skrypt wyśle hash ciągu hasła na serwer.
Aby uzyskać więcej informacji i wsparcie dotyczące innych algorytmów obliczania wartości skrótu, możesz odwiedzić:
http://code.google.com/p/crypto-js/
źródło
Wybierając bibliotekę, ważne jest również, aby sprawdzić, czy obsługuje nowoczesne frameworki, takie jak Bower, przekazuje jslint, obsługuje model wtyczek dla JQuery lub systemów modułowych, takich jak AMD / RequireJS, poza aktywnym rozwojem i ma więcej niż 1 współautorów. Istnieje kilka opcji, które spełniają niektóre lub wszystkie z tych dodatkowych kryteriów:
Przykład z CryptoJS:
Porównanie wydajności powyższych bibliotek znajduje się na stronie http://jsperf.com/md5-shootout/7 . Na mojej maszynie obecne testy (które są wprawdzie stare) pokazują, że jeśli szukasz prędkości, Spark MD5 jest najlepszym wyborem (podobnie jak zwykły kod JKM). Jeśli jednak szukasz bardziej wszechstronnej biblioteki, najlepszym rozwiązaniem jest CryptoJS, chociaż jest on o 79% wolniejszy niż Spark MD5. Jednak wyobrażam sobie, że CryptoJS ostatecznie osiągnie taką samą prędkość, ponieważ jest nieco bardziej aktywnym projektem.
źródło
źródło
Znalazłem wiele artykułów na ten temat. Wszyscy zasugerowali wdrożenie Josepha Meyersa.
patrz: http://jsperf.com/md5-shootout na temat niektórych testów
W moim dążeniu do najwyższej prędkości spojrzałem na ten kod i zobaczyłem, że można go poprawić. Więc stworzyłem nowy skrypt JS oparty na kodzie Josepha Meyersa.
zobacz Ulepszony kod Jospeh Meyers
źródło
Obecnie najszybsza implementacja md5 (na podstawie kodu Josepha Myersa):
https://github.com/iReal/FastMD5
porównanie jsPerf: http://jsperf.com/md5-shootout/63
źródło
Muszę tylko obsługiwać przeglądarki HTML5 obsługujące tablice tekstowe (DataView, ArrayBuffer itp.). Myślę, że wziąłem kod Josepha Myersa i zmodyfikowałem go, aby obsługiwał przekazywanie tablicy Uint8Array. Nie złapałem wszystkich ulepszeń i prawdopodobnie nadal istnieje kilka artefaktów tablicy char (), które można ulepszyć. Potrzebowałem tego do dodania do projektu PouchDB.
źródło
txt = ''
to właściwie znaczy?Napisałem testy, aby porównać kilka implementacji skrótu JavaScript, w tym większość wspomnianych tu implementacji MD5. Aby uruchomić testy, przejdź do http://brillout.github.io/test-javascript-hash-implementations/ i poczekaj chwilę.
Wydaje się, że wdrożenie odpowiedzi YaMD5 przez R. Hilla jest najszybsze.
źródło
Niepokoiło mnie to, że nie mogłem znaleźć implementacji, która jest zarówno szybka, jak i obsługuje ciągi Unicode.
Stworzyłem więc taki, który obsługuje ciągi Unicode i wciąż pokazuje jako szybszy (w momencie pisania) niż najszybsze obecnie implementacje ciągów tylko ascii:
https://github.com/gorhill/yamd5.js
Na podstawie kodu Josepha Myersa, ale używa TypedArrays oraz innych ulepszeń.
źródło
Dla żartu,
ten ma 42 linie, mieści się w 120 znakach w poziomie i wygląda dobrze. Czy to jest szybkie Cóż - jest wystarczająco szybki i mniej więcej taki sam jak wszystkie inne implementacje JS.
Chciałem po prostu czegoś, co nie wygląda brzydko w moim pliku helpers.js i nie spowalnia mojego SublimeText za pomocą 20-milowej długości zminimalizowanej jedno-liniowej.
Oto mój ulubiony MD5.
Ale tak naprawdę zamieściłem to tylko ze względów estetycznych. Ponadto z komentarzami jest to dokładnie 4000 bajtów. Proszę nie pytać dlaczego. Nie mogę znaleźć właściwego wyjaśnienia dla mojego zachowania OCD / rebeliantów. Również dziękuję Paul Johnston, dziękuję Greg Holt. (Uwaga dodatkowa: pominęliście kilka słów kluczowych var, więc mogłem je dodać).
źródło
Node.js ma wbudowane wsparcie
Fragment kodu powyżej oblicza ciąg szesnastkowy MD5 dla ciągu
hello world
Zaletą tego rozwiązania jest to, że nie trzeba instalować dodatkowej biblioteki.
Myślę, że wbudowane rozwiązanie powinno być najszybsze. Jeśli nie, powinniśmy utworzyć emisję / PR dla projektu Node.js.
źródło
js-md5 obsługuje łańcuch UTF-8, tablicę, ArrayBuffer, AMD ....
i szybko. jsperf
źródło
Może ten pakiet był przydatny
https://www.npmjs.com/package/pure-md5
źródło
Dlaczego nie spróbować http://phpjs.org/functions/md5/ ?
Niestety wydajność jest ograniczona w przypadku dowolnego emulowanego skryptu, jednak może to renderować prawdziwy hasz md5. Chociaż odradzałbym używanie md5 do haseł, ponieważ jest to szybko renderowany skrót.
źródło
Obliczanie na karcie graficznej powinno być znacznie szybsze (zaimplementuj algorytm haszujący w WebGL), jak omówiono tutaj o SHA256: Czy możliwe jest obliczanie skrótów sha256 w przeglądarce przy użyciu karty graficznej użytkownika, np. za pomocą WebGL lub Flash?
źródło
Możesz także sprawdzić moją implementację md5 . Powinno być ok. takie same jak inne opublikowane powyżej. Niestety wydajność jest ograniczona wewnętrzną pętlą, której dalsza optymalizacja nie jest możliwa.
źródło
Jeśli wydajność Twojej aplikacji jest ograniczona przez implementację MD5 JavaScript, to naprawdę robisz coś złego. Zastanów się nad zmianą architektury (wskazówka: rzadziej używaj MD5)
źródło