Recientemente leí en algún sitio que a pesar de que ambos CRC32 y MD5 son lo suficientemente homogéneas y estables, CRC32 es más eficiente que el MD5. MD5 que parece ser una muy comúnmente utilizado algoritmo de hash, pero si CRC32 es más rápido, más eficiente de la memoria entonces, ¿por qué no?

  • Que sirven a propósitos diferentes por completo. Para uno, el Crc no avalancha, haciéndolos terrible de las funciones de hash: home.comcast.net/~bretm/hash/8.html
  • Básicamente, lo que el CRC se supone que debe hacer es decirle a usted cuando una cierta cantidad de bits que se daña. La propiedad deseada es: «para que los pequeños cambios a un mensaje, obtener un resultado diferente». Para hash, el comportamiento deseado es mucho más fuerte: «para cualquiera de los dos mensajes, el resultado debe ser salvajemente diferentes». Si usted quiere una rápida de alta calidad hash, que no necesariamente es criptográficamente seguro, me gustaría considerar Bob Jenkins SpookyHash: burtleburtle.net/bob/hash/spooky.html (Advertencia: C++).
  • Para la referencia: «cayendo en avalanchas» básicamente significa que para cualquier mensaje, si una los bits de la entrada de volteretas, la probabilidad de todos de salida única con el volteo de bits debe ser lo más cercano a un 50% como sea posible. Esto es absolutamente esencial para la criptográfica fines. Para su uso en tablas hash, también creo que esto ayudaría a evitar colisiones/agrupación – y por el contrario la falta de cayendo en avalanchas contribuiría a ellos – pero realmente no puedo con las matemáticas.
  • También: blog.reverberate.org/2012/01/state-of-hash-functions-2012.html
  • Depende de lo que usted desea que el valor para: ver otros comentarios y respuestas a continuación. * detección de errores * hash (es decir, la distribución de los valores en un espacio de número) * resumen del mensaje
InformationsquelleAutor bytefire | 2013-04-20

9 Comentarios

  1. 46

    MD5 es un one-way hash algoritmo. One-way hash algoritmo se utiliza a menudo en la criptografía, ya que tienen la propiedad (por diseño) que es difícil encontrar la entrada que produce un determinado valor de hash. Específicamente es difícil hacer dos entradas diferentes, que le da a la misma-manera-hash. Aquellos que se utilizan a menudo como una manera de demostrar que una cantidad de datos no han sido alterados intencionalmente puesto que el código hash de producción. Como el MD5 es un one-way hash algoritmo, el énfasis está en la seguridad por encima de la velocidad. Por desgracia MD5 es ahora considerada insegura.

    CRC32 está diseñado para detectar cambios accidentales de los datos y se utilizan comúnmente en las redes y dispositivos de almacenamiento. El propósito de este algoritmo no es para proteger contra intencionalmente cambios , pero en lugar de atrapar a los accidentes de errores de red y disco errores de escritura etc. El énfasis de este algoritmo es de los más en la velocidad que en la seguridad.

    • Bueno, CRC32 no dirección «seguridad» en el sentido criptográfico, en absoluto. El énfasis está en el error-capacidad de detección, con resistencia a factores tales como la líder/los ceros a la izquierda/queridos, ráfaga de errores, que se repite bits, los cambios en la longitud del mensaje, etc. – en conjunción con la relativa sencillez de implementar en términos de la lógica de hardware (que por lo general operan en los datos de tasa de bits), y por lo tanto, la velocidad de operación en una implementación de software.
  2. 17

    De Artículo de Wikipedia en MD5 (el énfasis es mío):

    MD5 es ampliamente utilizado función hash criptográfica

    Ahora CRC32:

    CRC es un error de detección del código de

    Así, como se puede ver, CRC32 no es un algoritmo de hash. Eso significa que usted no debe utilizar para la mezcla, debido a que no fue hecha para eso.

    Y creo que no tiene mucho sentido hablar de uso común, debido a que los algoritmos similares se utilizan para diferentes propósitos, cada uno con significativamente diferentes requisitos. No existe un único algoritmo que es mejor para el uso común, en su lugar, usted debe elegir el algoritmo más adecuado para su uso específico.

    • CRC32 es un función hash, pero no es un cyrptographic, la función de hash.
    • Hace técnicamente satisfacer la definición de una función hash. Pero no fue construida para ser uno, y así no es una buena idea para usarlo como una función de hash, de cifrado o de otra manera.
  3. 4

    Una gran diferencia entre CRC32 y MD5 es que por lo general es fácil de recoger una suma de comprobación CRC32 y luego vienen con un mensaje que hashes para que la suma de comprobación, incluso si no son restricciones impuestas en el mensaje, mientras que el MD5 está específicamente diseñada para hacer este tipo de cosas, es muy difícil (aunque está mostrando su edad – esto es ahora posible en algunas situaciones).

    Si usted está en una situación donde es posible que un adversario podría decidir sentarse y crear una carga de mensajes especificados CRC32 hash, para imitar a otros mensajes, o simplemente hacer una tabla hash realizar muy mal, porque todo hash para el mismo valor, entonces MD5 sería una mejor opción. (Incluso mejor, en mi humilde opinión, sería HMAC-MD5 con una llave de valor que es único en el módulo de uso y desconocido fuera de ella).

    • Me gustaría tener problema con el uso de la frase «un mensaje que hashes para que la suma de comprobación» – yo sé lo que quieres decir, pero sugeriría algo así como «comparte el mismo valor del CRC» – ya que no una función «hash».
    • CRC32 no es un criptográficos hash, pero puede ser utilizado como una función de hash. El post original se menciona específicamente las funciones de hash. CRC encaja dentro de la definición de una función de hash como en en.wikipedia.org/wiki/Hash_function, y es mencionado específicamente (aunque con algunos muy dudosa sugerencias sobre el uso de sólo la parte superior de 16 bits).
  4. 3

    Crc se utilizan para protegerse contra los errores aleatorios, por ejemplo en la transmisión de datos.

    Funciones de hash criptográfico están diseñados para proteger contra inteligente adversarios forja el mensaje, aunque MD5 ha sido roto en ese sentido.

  5. 3

    La razón principal CRC32 (o CRC8, o CRC16) es utilizado para cualquier propósito es que puede ser barato implementado hardware como un medio de detectar «random» la corrupción de datos. Incluso en las implementaciones de software, puede ser útil como un medio de detectar al azar de la corrupción de los datos de hardware de causas tales como ruidoso, en la línea de comunicaciones o poco fiables flash media). No es resistente a las manipulaciones, ni es generalmente adecuado para probar si dos archivos arbitrarios son propensos a ser el mismo: si cada fragmento de datos en el archivo es seguido inmediatamente por un CRC32 de ese pedazo (algunos formatos de datos de hacerlo), cada parte tendrá el mismo efecto en el archivo de la CRC como lo haría un pedazo de todo de cero bytes, independientemente de lo que los datos se almacenan en ese trozo.

    Si uno tiene los medios para calcular un CRC32 rápidamente, puede ser útil en combinación con otros de suma de comprobación o hash de los métodos, si los diferentes archivos que tenía idéntico CRC sería probable que difieren en uno de los otros hashes y viceversa, pero en muchas otras máquinas de la suma de comprobación o hash métodos son propensos a ser más fácil de calcular en relación a la cantidad de protección que proporcionan.

  6. 3

    Debe utilizar MD5 que es de 128 bits de longitud.
    CRC32 es de sólo 32 bits de largo y su propósito es detectar los errores no de hash de las cosas.
    En caso de que usted necesita sólo una de 32 bits, la función de hash que usted puede elegir de 32 bits que son devueltos por los MD5 de los LSBs/Msb/Lo que sea.

  7. 3

    Depende de tus objetivos. Aquí están algunos ejemplos de lo que se puede hacer con CRC32 frente MD5:

    La detección de archivos duplicados

    Si quieres comprobar si dos archivos son los mismos, CRC32 hashing es el camino a seguir, porque es más rápido que el MD5. Pero cuidado: CRC fiable sólo indica si los archivos binarios son diferentes; seguramente no dirá si son idénticos. Si se obtienen diferentes valores hash de dos archivos, que no puede ser el mismo archivo, para que usted pueda rechazar como duplicados muy rápidamente.

    No importa lo que sus claves son, el CRC32 hash será uno de 2^32 valores diferentes. Suponiendo que la muestra aleatoria de los archivos, la probabilidad de colisión entre los hashes de los dos archivos es de 1 /2^32. La probabilidad de colisiones entre cualquiera de N dado archivos es (N – 1) /2^32.

    La detección de software malicioso

    Si la seguridad es un problema, como la descarga de un archivo y la comprobación de la fuente de hash contra el suyo para ver si es válido, entonces el CRC es una mala opción. Esto es debido a que los atacantes hacer de malware que tendrá el mismo CRC hash. En este caso, MD5 es más seguro-CRC no fue hecho para la seguridad. Dos diferentes archivos binarios son más propensos a tener un diferente hash MD5 de un CRC de hash.

    Proteger las contraseñas para la autenticación de usuario

    Sincrónica (one-way) el cifrado de datos es más fácil, más rápido y más seguro que asincrónica (2-way) de cifrado, por lo que es un método común para almacenar contraseñas. Básicamente, la contraseña será combinada con otros datos (sales), y a veces el nombre de usuario, entonces el hash se llevará a cabo en todo esto combinado de datos. Al azar de sales de reducir considerablemente las posibilidades de que dos contraseñas siendo el mismo. Por defecto, la misma contraseña que tendrá el mismo valor hash para la mayoría de los algoritmos, por lo que debe agregar su propia aleatoriedad. Por supuesto, la sal debe ser guardada externamente.

    Qué bueno es una contraseña que usted no puede ver? Usted no necesita ver para verificar la cuenta de un usuario. Usted acaba de tomar la información que te dan cuando inician sesión. Utilice su nombre de usuario para obtener la sal. Usted, a continuación, combinar esta sal con las credenciales del usuario (contraseña y posiblemente el nombre de usuario) para obtener un nuevo hash. Si coincide con el de en la base de datos, luego de su inicio de sesión es correcto. Puesto que usted está almacenando estas contraseñas, se debe ser MUY seguro. No he mencionado la inicialización de los vectores, iterativo de hash, la aleatoriedad de la teoría, etc.

    Criptográficos hash son más caros para calcular que un CRC. También, mejor hash como sha256 son más seguras, pero más lento de hash. Por cierto, sha512 hash es más rápido que sha256.

  8. 0

    De un hombre común es de otro hombre poco frecuentes. Común varía según el campo que se está trabajando.

    Si lo estás haciendo muy rápido transmisiones o la elaboración de códigos hash para objetos pequeños, a continuación, CRCs son mejores ya que son mucho más rápido y las posibilidades de conseguir la misma de 16 o 32 bits de CRC de los datos incorrectos son escasas.

    Si es megabytes de datos, por ejemplo, una iso de linux, entonces usted podría perder un par de megabytes y terminar con el mismo CRC. No es tan probable que con MD5. Por esa razón MD5 se utiliza normalmente para grandes transferencias. Es más lento pero más fiable.

    Así que, básicamente, si usted va a hacer una gran transmisión y comprobar al final si usted tiene el resultado correcto, el uso de MD5. Si usted va a transmitir en trozos pequeños, a continuación, utilizar el CRC.

    • «Si […] trabajando códigos hash para objetos pequeños, a continuación, CRCs son mejores» No, no lo son. el CRC no es un algoritmo de hash.
    • Cualquier algoritmo que asigna un gran conjunto de datos a un conjunto de datos más pequeño puede ser utilizado como un algoritmo de hash. Puede que no sea especialmente buena en la que usted puede obtener una gran cantidad de colisiones, pero todavía se puede utilizar.
    • Pero no estás diciendo que puede uso de la CRC como un algoritmo de hash, estás diciendo que tú debe uso de ella (en algunas circunstancias).
    • «si usted va a hacer una gran transmisión y comprobar al final si usted tiene el resultado correcto» – la cosa es, que esta no es la mezcla. Si bien es cierto que las funciones de hash puede se utiliza para detectar errores de transmisión (ya que tienen muy – incluso innecesariamente – sólidas garantías de la difusión), es erróneo confundir los conceptos. Yo también fuertemente duda, hay un no despreciable probabilidad de CRC dando los mismos resultados después de lop off aleatorio fragmento de una ISO.
    • Un CRC detectará todos: * 1 o 2 errores de bit * número impar de errores * errores de ráfaga mismo ancho que el valor del CRC
  9. -1

    Realidad, CRC32 es no es más rápido que MD5 es.

    Por favor, eche un vistazo a: https://3v4l.org/2MAUr

    Que el script de php que se ejecuta a varios de los algoritmos de hash y mide el tiempo empleado para calcular los hashes por cada algoritmo. Se muestra que el MD5 es generalmente el más rápido algoritmo de hash alrededor. Y, muestra que incluso SHA1 es más rápido que el MD5 en la mayoría de los casos de prueba.

    Así que, de todos modos, si quieres hacer algo rápido de detección de errores, o buscar cambios al azar… yo siempre consejo a ir con MD5, ya que simplemente lo hace todo.

    • Usted está midiendo aquí la velocidad relativa de PHP implementaciones, no la velocidad de los algoritmos. Parece como PHP mal implementado crc32. CRC32 ES mucho más rápido que el MD5, cuando una biblioteca de cifrado es implementar correctamente. Gracias a crc32c hadware accelleration disponible en la última Cpu Intel, se puede calcular un crc32c a la velocidad del ancho de banda de memoria (más de 4 GB/s en mi PC), mientras que el MD5 no oleoducto e incluso la mayoría de las versiones optimizadas son mucho más lentos.

Dejar respuesta

Please enter your comment!
Please enter your name here