Comprimento máximo para entrada / saída MD5


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.


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 .


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.


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)!


4

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


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 .


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).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.