Se as linguagens de programação fossem carros...
2904 registros
2 hoje
6 nesta semana
13 neste mês| 87,4% | | Brasil |
| 9,7% | | Portugal |
| 0,8% | | EUA |
| 0,2% | | Espanha |
| 0,1% | | Japão |
| Hoje: | 1271 |
| Ontem: | 1336 |
| Esta semana: | 2607 |
| Semana passada: | 6313 |
| Este mês: | 6074 |
| Mês passado: | 56643 |
| Total: | 166395 |
| MD5 * |
|
|
|
| Criptografia Numaboa - Funções Hash | |||||
| Escrito por vovó Vicki | |||||
| Dom, 25.09.2005 02:34 | |||||
Página 1 de 3 O MD5 foi desenvolvido por Ron Rivest em 1991. É basicamente o MD4 com um "cinto de segurança" - os cálculos são um pouco mais lentos mas, em compensação, é muito mais seguro. Da mesma forma que outras funções hash, o MD5 é usado em assinaturas digitais onde um texto longo precisa ser "comprimido" de forma segura antes de ser cifrado com uma chave privada (secreta) por um criptossistema de chave pública. Foi projetado para máquinas de 32 bits, podendo ser facilmente programado de forma compacta. O autor colocou o Como o texto sobre a função hash MD4 é bastante minucioso e o MD5 é muito parecido, não há a necessidade de entrar em muitos detalhes. Caso você tenha dúvidas, complemente a leitura com o texto MD4. Descrição do algoritmo MD5O entrada do MD5 é um fluxo de dados (mensagem) que pode ter um número arbitrário de bits, representado por b, um número inteiro positivo que varia de zero até o infinito. Para obter o digesto da mensagem, seus bits, representados por m0, m1, ..., m{b-1}, onde b = número de bits da mensagem, são submetidos a diversas operações. Este processo é dividido em cinco etapas ou passos. Passo 1: Preparação do fluxo de dadosAdiciona-se à mensagem os bits necessários para que seu tamanho mais 64 bits seja divisível por 512. Passo 2: Inclusão do comprimentoDepois da adição de bits, uma representação binária do tamanho original da mensagem e que ocupa 64 bits, é adicionada à mesma. O conjunto obtido é processado em blocos de 512 bits na estrutura iterativa de Damgård/Merkle, sendo que cada bloco é processado em quatro rodadas distintas. Passo 3: Inicialização do buffer MDUm buffer de quatro words é usado para calcular o digesto da mensagem. Os registradores de 32 bits A, B, C e D são inicializados com os seguintes valores hexadecimais:
word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10
Passo 4: Processamento da mensagem em blocos de 16 words (512 bits)Primeiro definse-se quatro funções auxiliares. Cada uma delas usa três words de 32 bits para produzir uma saída de um word de 32 bits.
F(X,Y,Z) = (X and Y) or (not(X) and Z)
G(X,Y,Z) = (X and Z) or (Y and not(Z))
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X or not(Z))
A função F atua como condicional sobre cada um dos bits: se X então Y senão Z. É importante frisar que, se os bits de X, Y e Z são independentes e não induzidos (unbiased) então cada bit de F(X,Y,Z) também será independente e não induzido. As funções G, H e I são semelhantes à função F quanto à ação "paralela bit a bit" produzindo saídas de bits independentes e não induzidos se os mesmos tiverem estas características. A função H é apenas um "XOR" ou função de "paridade" das suas entradas. As etapas deste passo usam uma tabela de 64 elementos, T[1] a T[64], construída à partir da função seno. T[i] for o nésimo elemento da tabela e é igual à parte inteira de abs(seno(i)) multiplicada por 4294967296, onde i é expresso em radianos. Antes de iniciar o processamento, deve-se armazenar os valores de A, B, C e D. Neste texto, as variáveis de trabalho serão expressas em letras minúsculas, portanto armazenamos a = A, b = B, c = C e d = D. Divide-se cada bloco de 512 bits em 16 sub-blocos de 32 bits, aqui identificados por X[0] a X[15]. Genericamente, os sub-blocos são designados por X[k]. A seguir, aplica-se as funções F, G, H e I em quatro rodadas:
/* Rodada 1
/* Seja [abcd k s i] a operação a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
/* Faça as seguintes 16 operações.
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* Rodada 2
/* Seja [abcd k s i] a operação a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s)
/* Faça as seguintes 16 operações.
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/* Rodada 3
/* Seja [abcd k s i] a operação a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s)
/* Faça as seguintes 16 operações
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/* Rodada 4
/* Seja [abcd k s i] a operação a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s)
/* Faça as seguintes 16 operações
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
/* Finalmente, faça as adições dos resultados obtidos para a, b, c, d
/* com os valores iniciais de A, B, C e D
A = a + A
B = b + B
C = c + C
D = d + D
|
|||||
| Atualização Qua, 20.02.2008 00:36 |