Qual é a diferença entre este formato:
Hash found: admin:$1$$oLN1UCc1Y3T30QkMcKMSx0
e o seguinte:
5f4dcc3b5aa765d61d8327deb882cf99
E também,
Como transformar o primeiro formato hash no segundo?
Obrigado em antecipadamente.
Comentários
Resposta
O primeiro exemplo se parece com um formato de arquivo sombra em: ID (admin
) Algoritmo (1
= MD5) Sal (nenhum) Hash (oLN1UCc1Y3T30QkMcKMSx0
), com o hash no que parece ser o formato Base64.
O segundo (5f4dcc3b5aa765d61d8327deb882cf99
) parece ser uma string hexadecimal de 128 bits consistente com um hash MD5 como bem.
No entanto, convertendo ambos para binários & e de volta para seus formatos opostos, os dois hashes não correspondem:
-
Base64 do valor binário representado pela string hexadecimal (
5f4dcc3b5aa765d61d8327deb882cf99
) éX03MO1qnZdYdgyfeuILPmQ
. -
Por outro lado, a string hexadecimal do hash base64 (
oLN1UCc1Y3T30QkMcKMSx0
) éa0b3755027356374f7d1090c70a312c7
.------- Edit -----
Como user1686 apontou: oLN1UCc1Y3T30QkMcKMSx0 é MD5crypt, que é mil rodadas de MD5 com extras em cada rodada. Se ambos os hashes forem de fato da mesma senha, deve ser possível converter o hash MD5 direto em seu equivalente no-salt MD5Crypt ignorando o primeiro cálculo MD5 no MD5Crypt e alimentando-o com o hash em vez da senha.
Resposta
A parte após o último $ é codificada em base64, que é uma maneira razoavelmente compacta (quatro caracteres se tornam três bytes) para representar dados binários como caracteres comuns para impressão (não códigos de controle ASCII ou qualquer coisa que exija o bit alto). O segundo hash é simplesmente codificado em hexadecimal, que é menos eficiente (quatro caracteres se tornam dois bytes), mas mais fácil de ler, especialmente para programadores (que usam hexadecimal o tempo todo).
EDITAR: Além disso, o primeiro o algoritmo é quase certamente md5 crypt , que é um MD5 iterado com algumas coisas adicionais feitas. Portanto, não vai produzir a mesma saída que o MD5 de base para uma determinada entrada. E de fato vemos que não: se você converter a parte posterior do último $ em hexadecimal, sai a0b3755027356374f7d1090c70a312c7. Isso também pode (em pelo menos em parte) porque acho que md5crypt usa uma base64 personalizada, que tem os mesmos caracteres da base64 normal em uma ordem diferente.
O primeiro hash é um exemplo do formato de senha / etc / shadow. $1
significa MD5crypt e a falta de qualquer coisa entre os próximos dois caracteres $ significa que não tem sal. Não temos essa informação para o segundo; pode ser salted ou, possivelmente, uma senha diferente, um algoritmo de hash diferente ou ambos. No entanto, é mais provável ser MD5 vazio do que md5crypt.
Editado para refletir a diferença entre MD5 e md5crypt
Comentários
- Mesmo que ' seja sem sal, $ 1 $ ainda não é apenas MD5 vazio – é ' s md5crypt , que envolve 1000 rodadas de MD5 com alguns outros temperos adicionados.
- O segundo hash é apenas md5 (' senha ').
echo -n 'password' | md5sum
produz5f4dcc3b5aa765d61d8327deb882cf99
Hash found: admin:$1$$oLN1UCc1Y3T30QkMcKMSx0
. Também encontrei um caso semelhante aqui link