Longitud máxima para entrada / salida MD5

164

¿Cuál es la longitud máxima de la cadena que puede tener hasd md5? O: si no tiene límite, y si es así, ¿cuál será la longitud máxima del valor de salida md5?

Arun David
fuente
2
Sigue el wiki: en.wikipedia.org/wiki/MD5
Frank

Respuestas:

240

MD5 procesa un mensaje de longitud arbitraria en una salida de longitud fija de 128 bits, típicamente representada como una secuencia de 32 dígitos hexadecimales.

Daniel Vassallo
fuente
95
Nota personal: MD5 hash length = 128 bits= 16 bytes=32 hex digits
suma de comprobación
2
[Una edición normal] 32 dígitos hexadecimales y la cadena contiene solo palabras de 'az' y dígitos de '0-9'
v1h5
1
Noté un pequeño error en los comentarios anteriores. El texto debe ser como se cita :) "32 dígitos hexadecimales y la cadena contiene solo letras de 'az' y dígitos de '0-9'"
Remis B
2
@Shafizadeh Como dice la respuesta, la entrada tiene una longitud arbitraria. Esto significa que el parámetro puede tener cualquier longitud que necesite.
kdojeteri
1
@Peping Una pequeña corrección: la entrada puede ser tan larga como el tipo de datos utilizado en el lenguaje de programación utilizado. Ejemplo: las cadenas de Java usan una matriz internamente, por lo tanto, una cadena solo puede contener (2 ^ 31) -1 caracteres (o menos, dependiendo del tamaño del montón). Esa también sería su entrada máxima para la función MD5 en Java. Pero en teoría pura, la función MD5 podría procesar de hecho una entrada de longitud arbitraria. ;)
RicoBrassers
38

Agregar longitud

Una representación de b de 64 bits (la longitud del mensaje antes de que se agreguen los bits de relleno) se agrega al resultado del paso anterior. En el caso improbable de que b sea mayor que 2 ^ 64, solo se utilizan los 64 bits de orden inferior de b.

  • El hash siempre es de 128 bits. Si lo codifica como una cadena hexadecimal, puede codificar 4 bits por carácter, dando 32 caracteres.
  • MD5 no es encriptación. En general, no puede "descifrar" un hash MD5 para obtener la cadena original.

Ver más aquí .

Mark Byers
fuente
La longitud del mensaje es ilimitada . ¿Qué quiere decir mensaje ? ¿Es entrada? Mi pregunta esMD5("how many characters exactly?");
Shafizadeh
@Shafizadeh Su entrada puede ser lo más larga posible en su lenguaje de programación actual, en Java esto sería (2 ^ 31) -1 caracteres en una cadena. Y sí, el "mensaje" es la entrada.
RicoBrassers
@Shafizadeh ... o desde un archivo, la entrada podría ser tan grande como el almacenamiento disponible.
ToolmakerSteve
9

Puede tener cualquier longitud, pero, por supuesto, puede haber un problema de memoria en la computadora si la entrada de la cadena es demasiado larga. La salida es siempre de 32 caracteres.

Vidar Vestnes
fuente
44
Si la entrada de cadena es demasiado larga, no existiría en el sistema en primer lugar, a menos que esté en un archivo, en cuyo caso puede pasar bloques a la función de resumen a medida que se leen, en otras palabras, solo necesita tener blockbytes de entrada disponibles a la vez.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
6

El algoritmo ha sido diseñado para admitir longitud de entrada arbitraria. Es decir, puedes calcular hashes de archivos grandes como ISO de un DVD ...

Si hay una limitación para la entrada, podría provenir del entorno donde se utiliza la función hash. Supongamos que desea calcular un archivo y el entorno tiene un límite MAX_FILE.

Pero la cadena de salida siempre será la misma: ¡32 caracteres hexadecimales (128 bits)!

Kami
fuente
4

Un hash MD5 de 128 bits se representa como una secuencia de 32 dígitos hexadecimales.

Hamid Nazari
fuente
4

Es posible que desee utilizar SHA-1 en lugar de MD5 , ya que MD5 se considera roto.

Puede leer más sobre las vulnerabilidades MD5 en este artículo de Wikipedia .

Daniel Vassallo
fuente
55
Esto no es más que un rumor. MD5 es lo suficientemente bueno para la mayoría de las tareas habituales de desarrollo web
su sentido común el
11
Su creador, así como Bruce Schneier y Homeland Security están de acuerdo en que está roto ... ¿Cuántos más 'rumores' necesitan para convencerte de que en realidad ha estado roto por algún tiempo? El hecho es que es arbitrariamente fácil encontrar una entrada que genere un hash específico. Por supuesto, puede mitigar este riesgo al salar sus insumos, utilizando sales suficientemente grandes. En una nota al margen: SHA-1 se considera igual de roto. Si aconseja a las personas que actualicen, les aconsejo que actualicen a SHA-2, por favor.
kander
3
@kander oh, necesito un poquito. Un ejemplo. Dado un hash, ¿traerás una cadena fuente? ¿No es un enlace a un gran artículo, no la opinión de alguien sino solo una cadena de origen?
Su sentido común el
2
Nadie realmente mencionó lo que realmente quieren decir bajo el término "roto". Aunque, @YourCommonSense tiene sentido.
JSmyth
44
Estás hablando de los usos de seguridad de MD5. Pero MD5 (o cualquier otra técnica de hashing) tiene muchos otros usos. Yo, por mi parte, quiero usarlo para cambiar el nombre de un archivo por su hash. Seguramente no estoy preocupado por la resistencia a la colisión de MD5. Todo lo que publicaste sigue siendo cierto, solo mis 2 centavos.
tfrascaroli
3

No hay límite para la entrada de md5 que yo sepa. Algunas implementaciones requieren que toda la entrada se cargue en la memoria antes de pasarla a la función md5 (es decir, la implementación actúa en un bloque de memoria, no en una secuencia), pero esto no es una limitación del algoritmo en sí. La salida es siempre de 128 bits. Tenga en cuenta que md5 no es un algoritmo de cifrado, sino un hash criptográfico. Esto significa que puede usarlo para verificar la integridad de una porción de datos, pero no puede revertir el hash. También tenga en cuenta que md5 se considera roto, por lo que no debe usarlo para nada relacionado con la seguridad (todavía está bien verificar la integridad de los archivos descargados y demás).

tdammers
fuente