Comprimento máximo para entrada / saída MD5

164

Qual é o comprimento máximo da string que pode ter o hash MD5? Ou: se não houver limite e, em caso afirmativo, qual será o comprimento máximo do valor de saída do md5?

Arun David
fonte
2
Siga o wiki: en.wikipedia.org/wiki/MD5
Frank

Respostas:

240

O MD5 processa uma mensagem de tamanho arbitrário em uma saída de comprimento fixo de 128 bits, normalmente representada como uma sequência de 32 dígitos hexadecimais.

Daniel Vassallo
fonte
95
Nota para si mesmo: comprimento do hash MD5 = 128 bits= 16 bytes=32 hex digits
soma de verificação
2
[Uma edição normal] 32 dígitos hexadecimais e a string contém apenas palavras de 'az' e dígitos de '0-9'
v1h5 6/11/11
1
Notei um pequeno erro nos comentários anteriores. O texto deve estar como citado :) "32 dígitos hexadecimais e a string contém apenas letras de 'az' e dígitos de '0-9'"
Remis B
2
@Shafizadeh Como a resposta indica, a entrada tem um comprimento arbitrário. Isso significa que o parâmetro pode ter qualquer tamanho que você precisar.
Kdjeteri
1
Uma pequena correção: A entrada pode ser tão longa quanto o tipo de dados usado na linguagem de programação usada. Exemplo: as strings de Java usam uma matriz internamente; portanto, uma string pode conter apenas (2 ^ 31) -1 caracteres (ou menos, dependendo do tamanho da pilha). Essa também seria sua entrada máxima para a função MD5 em Java. Mas pura teoricamente, a função MD5 poderia processar de fato uma entrada de comprimento arbitrário. ;)
RicoBrassers
38

Anexar Comprimento

Uma representação de 64 bits de b (o comprimento da mensagem antes da adição dos bits de preenchimento) é anexada ao resultado da etapa anterior. No caso improvável de que b seja maior que 2 ^ 64, apenas os 64 bits de ordem inferior de b são usados.

  • O hash é sempre 128 bits. Se você o codificar como uma sequência hexadecimal, poderá codificar 4 bits por caractere, fornecendo 32 caracteres.
  • MD5 não é criptografia. Em geral, não é possível "descriptografar" um hash MD5 para obter a sequência original.

Veja mais aqui .

Mark Byers
fonte
O comprimento da mensagem é ilimitado . O que você quer dizer com mensagem ? É entrada? A minha pergunta éMD5("how many characters exactly?");
Shafizadeh
@Shafizadeh Sua entrada pode ser o maior possível na sua linguagem de programação atual; em Java, isso deve ser (2 ^ 31) -1 caracteres em uma string. E sim, a "mensagem" é a entrada.
RicoBrassers
@ Shafizadeh ... ou a partir de um arquivo, a entrada pode ser tão grande quanto o armazenamento disponível.
Página Inicial>
9

Você pode ter qualquer tamanho, mas é claro que pode haver um problema de memória no computador se a entrada String for muito longa. A saída é sempre 32 caracteres.

Vidar Vestnes
fonte
4
Se a entrada da string for muito longa, ela não existiria no sistema, a menos que esteja em um arquivo; nesse caso, você pode passar blocos para a função digest à medida que são lidos, ou seja, você só precisa ter blockbytes da entrada disponíveis por vez.
L̳o̳̳n̳̳g̳̳p̳o̳̳k̳̳e̳̳
6

O algoritmo foi projetado para suportar comprimento de entrada arbitrário. Ou seja, você pode calcular hashes de arquivos grandes, como ISO de um DVD ...

Se houver uma limitação para a entrada, ela poderá vir do ambiente em que a função hash é usada. Digamos que você queira calcular um arquivo e o ambiente tenha um limite MAX_FILE.

Mas a string de saída será sempre a mesma: 32 caracteres hexadecimais (128 bits)!

Kami
fonte
4

Um hash MD5 de 128 bits é representado como uma sequência de 32 dígitos hexadecimais.

Hamid Nazari
fonte
4

Você pode usar o SHA-1 em vez do MD5 , pois o MD5 é considerado quebrado.

Você pode ler mais sobre as vulnerabilidades do MD5 neste artigo da Wikipedia .

Daniel Vassallo
fonte
5
isso não passa de um boato. MD5 é bom o suficiente para a maioria das tarefas de desenvolvimento Web habituais
Seu senso comum
11
Seu criador, assim como Bruce Schneier e Homeland Security, concordam que está quebrado ... Quantos mais 'rumores' você precisa para convencê-lo de que ele está quebrado há algum tempo? O fato é que é arbitrariamente fácil encontrar uma entrada que gere um hash específico. Obviamente, você pode atenuar esse risco salgando suas entradas, usando sais suficientemente grandes. Em uma nota lateral: o SHA-1 é considerado igualmente quebrado. Se você aconselhar as pessoas a atualizarem, aconselhe-as a atualizar para o SHA-2, por favor.
kander
3
@ kander oh eu preciso de um pouco. Um exemplo. Dado um hash, você trará uma string de origem? Não é um link para um ótimo artigo, não a opinião de alguém, mas apenas uma string de origem?
Seu senso comum
2
Ninguém realmente mencionou o que realmente significa sob o termo "quebrado". Embora, @YourCommonSense faça sentido.
JSmyth
4
Você está falando sobre os usos de segurança do MD5. Mas o MD5 (ou qualquer outra técnica de hash) tem muitos outros usos. Eu, por exemplo, quero usá-lo para renomear um arquivo por seu hash. Certamente não estou preocupado com a resistência à colisão do MD5. Tudo o que você postou ainda é verdade, apenas meus 2 centavos.
Tfrascaroli
3

Não há limite para a entrada do MD5 que eu conheço. Algumas implementações exigem que toda a entrada seja carregada na memória antes de passá-la para a função md5 (ou seja, a implementação atua em um bloco de memória, não em um fluxo), mas isso não é uma limitação do próprio algoritmo. A saída é sempre 128 bits. Observe que o md5 não é um algoritmo de criptografia, mas um hash criptográfico. Isso significa que você pode usá-lo para verificar a integridade de um pedaço de dados, mas não pode reverter o hash. Observe também que o md5 é considerado quebrado, portanto você não deve usá-lo para nada relacionado à segurança (ainda é bom verificar a integridade dos arquivos baixados e outros).

tdammers
fonte