Jak utworzyć skrót md5 za pomocą wiersza polecenia Arch Linux?

8

W Arch Linux, jak mogę utworzyć pojedynczy hash md5 dla hasła za pomocą wiersza poleceń? Oczywiście zdaję sobie sprawę z tego, że dostępne są bezpieczne algorytmy haszujące hasła, których md5 nie jest, ale to tylko część eksperymentu.

Paradoks
źródło
4
Możesz usunąć słowo „więcej” przed „bezpieczne”. Ponieważ są dostępne bezpieczne hashe (lub przynajmniej niektóre z pewnymi zabezpieczeniami), MD5 nie jest jednym z nich.
Todd Wilcox,
2
Dla przypomnienia, nawet bezpieczny szyfr kryptograficzny, taki jak SHA-256, nie tworzy dobrego skrótu hasła . Wiem, że potrzebujesz czegoś takiego jak sól, aby pokonać ataki tęczowego stołu i jestem pewien, że istnieją inne problemy, o których nie wiem.
Peter Cordes,

Odpowiedzi:

18

Po prostu echodo md5sum.

Pierwszy wynik uwzględnia znak nowej linii na końcu łańcucha przed wygenerowaniem skrótu.

$ echo P@ssword1 | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba  -

W przeciwnym razie, jak stwierdza @AFH , jeśli nie chcesz mieć znaku nowej linii, wykonaj następujące czynności:

$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6  -
Unfundednut
źródło
9
Obejmuje to znak nowej linii wraz z hasłem: może być tym, czego chce pytający, ale jeśli nie, potrzebujesz echo -n 'P@ssword1' | md5sum. W haśle umieściłem cudzysłowy na wypadek, gdyby zawierały znaki interpretowane przez powłokę; Użyłem pojedynczych cudzysłowów, aby zahamować ekspansję, jeśli istnieje $.
AFH
7
Zwróci to zły wynik, ponieważ nie haszysz P@ssword1, ale P@ssword1<Newline>. Użyj echo -n P@ssword1 | md5sumzamiast tego.
phihag
@AFH Rozszerzyłem odpowiedź z twojego komentarza.
Unfundednut
5
„Pierwszy wynik zwróci znak nowej linii z krzyżykiem.” Nie, podczas generowania skrótu weźmie pod uwagę znak nowej linii, co jest zupełnie inną rzeczą!
Wyścigi lekkości na orbicie
Moja praca była zakończona. Poprawny.
Unfundednut
11

Żadna z odpowiedzi nie wspomina, że ​​za pomocą echo -n 'password' | …, będziesz zapisywać hasło do trwałej pamięci, a mianowicie do swojej historii.

Można tego uniknąć, w zależności od powłoki, poprzedzając polecenie spacją (przetestuj to dla swojej powłoki). Przeczytaj dokumentację powłoki, w jaki sposób jest to obsługiwane.

Możesz też użyć md5sumbezpośrednio, uruchamiając się md5sum, wpisując hasło, a następnie Ctrl+D. Nie wciskaj Entermiędzy hasłem i Ctrl+D, chyba że chcesz, aby hash zawierał nowy wiersz.

Jonas Schäfer
źródło
1
Zacząłeś tak dobrze (+1) ... ale po tym, jak powiedziałeś, że zapisanie hasła samolotu w pliku też działa (-1) 8-O(ile otworów bezpieczeństwa otwiera ...). BTW, jeśli zmienna $HISTCONTROLjest ustawiona na ignorowanie lub ignorowanie obu poleceń wprowadzonych z odstępem wiodącym, nie zostaną zapisane w historii ... Niemniej jednak zawsze dobrym pomysłem jest przetestowanie jej bezpośrednio. (+1 ponownie :-)) ...
Hastur
@Hastur Dobry punkt. Zapisywanie do pliku jest na ogół lepsze niż rozlewanie hasła w historii, ponieważ możesz po prostu odłączyć plik (który może nie działać z historią, w zależności od konfiguracji - widziałem powłoki, które (ponownie) zapisują historię przy wyjściu ). Masz jednak rację, że poprawne wpisanie hasła do pliku nie jest tak łatwe, jak uruchomienie vima lub czegoś takiego (ktoś chciałby przynajmniej ustawić umask, a nie wiem na pewno, czy to pozostawia dziury). Usunąłem część z odpowiedzi.
Jonas Schäfer
Widzę twoją edycję (ale właśnie głosowałem, że nie mogę dwa razy, ale mogę myśleć o czymś innym ...).
Hastur
8

Oto przykład użycia openssl

echo -n 'stack overflow' | openssl md5
(stdin)= 481b8423202598ecfb233c5fa68caf68

Openssl implementuje kilka różnych algorytmów mieszających, jeśli któregoś dnia potrzebujesz innego.

OPSXCQ
źródło
4

Wygląda na to, że wszyscy sugerują używanie echo- przynajmniej przez większość czasu, na szczęście, z -n, co łagodzi jeden z jego problemów (że drukuje nowy wiersz na końcu).

Ale echoniekoniecznie jest konsekwentny. Ma wiele dziwnych zachowań, o których należy pamiętać, i może być niezgodny między systemami. Lepiej użyć printfzamiast tego .

Dlatego powinieneś używać

$ printf '%s' 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6  -
$

Dzięki printf, jeśli chcesz nowy wiersz na końcu, musisz jawnie go dodać:

$ printf '%s\n' 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba  -
$ echo 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba  -
$

zamiast prosić o nieotrzymanie go (i mam nadzieję, że echodziała tak samo w systemie, na którym to działa w późniejszym czasie):

$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6  -
$

Aby rozwinąć kwestię dziwactw, oecho których wspomniałem powyżej, oto kilka:

  • Działa inaczej w różnych systemach. Wiele współczesnych systemów obsługuje -n, echoaby nie przerywać produkcji nową linią, ale niektóre mogą tego nie robić. A jeśli chcesz wydrukować -n? Niektóre implementacje mogą się różnić w zależności od ustawień w powłoce lub środowisku.
  • Obsługuje lub może nie obsługiwać niektórych sekwencji znaków (szczególnie znaków z odwrotnym ukośnikiem) w specjalny sposób. Posiadanie tych haseł nie jest całkowicie nierozsądne, a POSIX nie gwarantuje niczego na temat zachowania echa (jego zachowanie jest wyraźnie niezdefiniowane ), jeśli pierwszy argument -nlub którykolwiek z jego argumentów zawiera ukośniki odwrotne.

Odpowiedzi na powyższe pytanie dotyczące używania printf zamiast echa zawierają jeszcze kilka innych, a także dalsze linki, aby przeczytać więcej, jeśli jesteś ciekawy.

CVn
źródło
„To (echo) ma wiele dziwactw behawioralnych, o których należy pamiętać”. Czy możesz to rozwinąć?
DavidPostill
@DavidPostill Dodałem trochę na ten temat. Czy uważasz, że tak jest lepiej?
CVn
Idealnie :) To było dla mojej własnej edukacji (nie chciałem sugerować, że coś było nie tak z twoją odpowiedzią).
DavidPostill
@DavidPostill Bez obaw; Lubię starać się, aby moje odpowiedzi były tak dobre, jak to tylko możliwe, nawet jeśli nie należą do najczęściej głosowanych! (Nie spodziewałem się, że wzbudzi to znaczną uwagę, nawet gdy zacząłem go pisać, ale czułem, że warto mieć odpowiedź na pytanie, w jaki sposób printf jest prawdopodobnie lepszym wyborem niż echo, szczególnie w przypadku czegoś takiego.)
CVn
To samo dotyczy mnie :)
DavidPostill
3

Pytanie sugeruje mi coś innego, więc dla kompletności:

Istnieje oparta na MD5 metoda mieszania hasła solonego, która zastąpiła oryginalną metodę crypt () opartą na DES do użycia w /etc/shadow. Zostało to zastąpione nowszymi rzeczami, ale jeśli kiedykolwiek spotkasz się z „hashowaniem hasła MD5” na wolności, może odnosić się do tego, a nie zwykłego MD5.

Te skróty oparte na MD5 są oznaczone prefiksem $1$i można je obliczyć za pomocąopenssl passwd -1


źródło
0

Możesz to łatwo zrobić za pomocą echoi md5sum:

 echo -n "password" | md5sum
Aaron Franke
źródło
2
Bez doda znak nowej linii do wyjścia, więc hash będzie nieprawidłowa. Na przykład dla wyniku jest , podczas gdy dla niego . -nechoecho -n lolwut | md5sum05a208028929fd77cfb5b08096a837dfecho lolwut | md5sumf291ceceddd9e13a0ab68cf1829ef583
Ivan Kolmychek