Hay muchas implementaciones de JavaScript MD5 por ahí. ¿Alguien sabe cuál es el más avanzado, el más corregido y el más rápido?
Lo necesito para esta herramienta.
javascript
performance
md5
Powtac
fuente
fuente
Respuestas:
Escuché que la implementación de Joseph's Myers es bastante rápida. Además, tiene un extenso artículo sobre la optimización de Javascript que describe lo que aprendió al escribir su implementación. Es una buena lectura para cualquier persona interesada en el rendimiento de JavaScript.
http://www.webreference.com/programming/javascript/jkm3/
Su implementación MD5 se puede encontrar aquí
fuente
var add32
línea 185 debería ser soloadd32
para encontrar la mejor bifurcación que pude y actualizarla a esta nueva versión: gist.github.com/MichaelPote/3f0cefaaa9578d7e30beTe sugiero que uses CryptoJS en este caso.
Básicamente, CryptoJS es una colección creciente de algoritmos criptográficos estándar y seguros implementados en JavaScript utilizando las mejores prácticas y patrones. Son rápidos y tienen una interfaz consistente y simple.
Entonces, si desea calcular el hash MD5 de su cadena de contraseña, haga lo siguiente:
Entonces, este script publicará el hash de su cadena de contraseña en el servidor.
Para obtener más información y asistencia sobre otros algoritmos de cálculo de hash, puede visitar:
http://code.google.com/p/crypto-js/
fuente
Al seleccionar la biblioteca, también es importante ver si es compatible con marcos modernos como Bower, pasa jslint, es compatible con el modelo de complemento para JQuery o sistemas de módulos como AMD / RequireJS, además de estar en desarrollo activo y tener más de 1 contribuyentes. Hay un par de opciones que satisfacen algunos o todos estos criterios adicionales:
Ejemplo de CryptoJS:
Hay una comparación de rendimiento entre las bibliotecas anteriores en http://jsperf.com/md5-shootout/7 . En mi máquina, las pruebas actuales (que son ciertamente antiguas) muestran que si está buscando velocidad, Spark MD5 es su mejor opción (y también lo es el código JKM simple). Sin embargo, si busca una biblioteca más completa, CryptoJS es su mejor opción, aunque es un 79% más lenta que Spark MD5. Sin embargo, me imagino que CryptoJS eventualmente alcanzará la misma velocidad, ya que es un proyecto un poco más activo.
fuente
fuente
Encontré varios artículos sobre este tema. Todos sugirieron la implementación de Joseph Meyers.
ver: http://jsperf.com/md5-shootout en algunas pruebas
En Mi búsqueda de la velocidad máxima, miré este código y vi que podía mejorarse. Así que creé un nuevo script JS basado en el código Joseph Meyers.
ver Código mejorado de Jospeh Meyers
fuente
Actualmente, la implementación más rápida de md5 (basada en el código de Joseph Myers):
https://github.com/iReal/FastMD5
Comparación de jsPerf: http://jsperf.com/md5-shootout/63
fuente
Solo necesito admitir navegadores HTML5 que admitan matrices mecanografiadas (DataView, ArrayBuffer, etc.) Creo que tomé el código de Joseph Myers y lo modifiqué para permitir pasar un Uint8Array. No capté todas las mejoras, y todavía hay probablemente algunos artefactos de matriz char () que se pueden mejorar. Necesitaba esto para agregar al proyecto PouchDB.
fuente
txt = ''
significa realmente?Escribí pruebas para comparar varias implementaciones de hash de JavaScript, incluida la mayoría de las implementaciones de MD5 mencionadas aquí. Para ejecutar las pruebas, vaya a http://brillout.github.io/test-javascript-hash-implementations/ y espere un poco.
Parece que la implementación de YaMD5 de la respuesta de R. Hill es la más rápida.
fuente
Me molestó que no pudiera encontrar una implementación que fuera rápida y compatible con cadenas Unicode.
Así que hice uno que admite cadenas Unicode y aún se muestra como más rápido (en el momento de la escritura) que las implementaciones de cadenas de solo ascii más rápidas actualmente:
https://github.com/gorhill/yamd5.js
Basado en el código de Joseph Myers, pero utiliza TypedArrays, además de otras mejoras.
fuente
Solo por diversión,
Éste tiene 42 líneas de largo, cabe en 120 caracteres horizontalmente y se ve bien. ¿Es rápido? Bueno, es lo suficientemente rápido y es aproximadamente lo mismo que todas las demás implementaciones de JS.
Solo quería algo que no se vea feo en mi archivo helpers.js y que no ralentice mi SublimeText con líneas cortas minificadas de 20 millas de largo.
Así que aquí está mi md5 favorito.
Pero realmente, lo publiqué simplemente por consideraciones estéticas. Además, con los comentarios son exactamente 4000 bytes. Por favor no preguntes por qué. No puedo encontrar una explicación adecuada para mi comportamiento OCD / rebelde. Además, gracias Paul Johnston, gracias Greg Holt. (Nota al margen: ustedes omitieron algunas palabras clave var, así que me tomé la libertad de agregarlas).
fuente
Node.js tiene soporte incorporado
El fragmento de código anterior calcula la cadena hexadecimal MD5 para la cadena
hello world
La ventaja de esta solución es que no necesita instalar una biblioteca adicional.
Creo que la solución integrada debería ser la más rápida. Si no, deberíamos crear un problema / PR para el proyecto Node.js.
fuente
js-md5 admite cadenas UTF-8, matriz, ArrayBuffer, AMD ...
y rápido. jsperf
fuente
Quizás este paquete sea útil
https://www.npmjs.com/package/pure-md5
fuente
¿Por qué no prueba http://phpjs.org/functions/md5/ ?
Desafortunadamente, el rendimiento está limitado con cualquier script emulado, sin embargo, esto puede generar hash md5 real. Aunque recomendaría no usar md5 para las contraseñas, ya que es un hash de renderizado rápido.
fuente
El hash mucho más rápido debería ser posible calculando en la tarjeta gráfica (implementar el algoritmo de hash en WebGL), como se discutió allí acerca de SHA256: ¿Es posible calcular los hash sha256 en el navegador usando la tarjeta de video del usuario, por ejemplo? mediante el uso de WebGL o Flash?
fuente
También puedes consultar mi implementación de md5 . Debería ser de aprox. lo mismo que el otro publicado anteriormente. Desafortunadamente, el rendimiento está limitado por el bucle interno que es imposible de optimizar más.
fuente
Si el rendimiento de su aplicación está limitado por una implementación de Javascript de MD5, entonces realmente está haciendo algo mal. Considere un cambio arquitectónico (Sugerencia: use MD5 con menos frecuencia)
fuente