Jaka jest różnica między tym formatem:
Hash found: admin:$1$$oLN1UCc1Y3T30QkMcKMSx0
a następującymi:
5f4dcc3b5aa765d61d8327deb882cf99
A także
Jak zamienić pierwszy format hash na drugi?
Dzięki z góry.
Komentarze
Odpowiedź
Pierwszy przykład wygląda jak plik cienia formularz at: ID (admin
) Algorytm (1
= MD5) Sól (brak) Hash (oLN1UCc1Y3T30QkMcKMSx0
), z hashem w czymś, co wygląda na format Base64.
Drugi (5f4dcc3b5aa765d61d8327deb882cf99
) wydaje się być ciągiem szesnastkowym składającym się z 128 bitów, co jest zgodne z hashem MD5, cóż.
Jednak po konwersji obu na binarny &, a następnie z powrotem do ich przeciwnych formatów, dwa skróty nie pasują:
-
Base64 wartości binarnej reprezentowanej przez ciąg szesnastkowy (
5f4dcc3b5aa765d61d8327deb882cf99
) toX03MO1qnZdYdgyfeuILPmQ
. -
Odwrotnie, ciąg szesnastkowy skrótu base64 (
oLN1UCc1Y3T30QkMcKMSx0
) toa0b3755027356374f7d1090c70a312c7
.------- Edit -----
Jako user1686 wskazał: oLN1UCc1Y3T30QkMcKMSx0 to MD5crypt, czyli tysiąc rund MD5 z dodatkami w każdej rundzie. Jeśli oba te skróty pochodzą w rzeczywistości z tego samego hasła, powinno być możliwe przekonwertowanie prostego skrótu MD5 na jego odpowiednik no-salt MD5Crypt przez pominięcie pierwszego obliczenia MD5 w MD5Crypt i podanie mu skrótu zamiast hasła.
Odpowiedź
Część po ostatnim znaku $ jest zakodowana w formacie base64, co jest dość zwartym (cztery znaki stają się trzema bajtami) sposobem przedstawiania danych binarnych jako zwykłych drukowalnych znaków (nie kodów sterujących ASCII lub czegokolwiek wymagającego wysokiego bitu). Drugi skrót jest po prostu zakodowany szesnastkowo, co jest mniej wydajne (cztery znaki stają się dwoma bajtami), ale łatwiejsze do odczytania, szczególnie dla programistów (którzy cały czas używają szesnastkowego).
EDYCJA: Dodatkowo, pierwszy Algorytm jest prawie na pewno crypt md5, który jest iterowaną wersją MD5 z kilkoma dodatkowymi elementami. W związku z tym nie da tego samego wyjścia co podstawowa MD5 dla danego wejścia. I rzeczywiście widzimy, że tak nie jest: jeśli zamienisz część po ostatnim $ na szesnastkowy, pojawi się a0b3755027356374f7d1090c70a312c7. przynajmniej częściowo) dlatego, że myślę, że md5crypt używa niestandardowego base64, który ma te same znaki co normalny base64 w innej kolejności.
Pierwszy hash jest przykładem formatu hasła / etc / shadow. $1
oznacza MD5crypt, a brak czegokolwiek między następnymi dwoma znakami $ oznacza, że jest niesolony. Po drugie nie mamy takich informacji; może to być solone lub być może inne hasło, inny algorytm skrótu lub oba. Jednak bardziej prawdopodobne jest bycie gołym MD5 niż md5crypt.
Zredagowane w celu odzwierciedlenia różnicy między MD5 i md5crypt
Komentarze
- Nawet jeśli ' jest niesolony, 1 $ nadal nie jest zwykłym MD5 – to ' s md5crypt , który obejmuje 1000 rund MD5 z dodanymi innymi przyprawami.
- Drugi skrót to po prostu md5 (' hasło ').
echo -n 'password' | md5sum
tworzy5f4dcc3b5aa765d61d8327deb882cf99
Hash found: admin:$1$$oLN1UCc1Y3T30QkMcKMSx0
. Podobny przypadek znalazłem tutaj link