MC, 15:12 wtorek, 18.06.2013 r.
Ilustracja do artykułu: md5sum - Jak obliczyć sumę kontrolną?

md5sum - Jak obliczyć sumę kontrolną?

W tym artykule chciałbym pokazać jak w prosty sposób możemy na systemach Linux generować hashe algorytmem md5 z plików, bądź tekstów (ciągów znaków, stringów).

Po co komu hashe md5?

Algorytm md5, jest algorytmem stratnym, generującym 128-bitowy klucz (32 znaki) z dowolnych danych. Przez pojęcie algorytmu stratnego rozumiemy tu tę jego cechę, że podczas kodowania przekazanych danych informacje o nich są tracone, przez co nie ma możliwości dekodowania klucza. Z tego też powodu oraz w oparciu o fakt, że nawet niewielka zmiana danych wejściowych powoduje wygenerowanie zupełnie innego klucza, hashe md5 stosowane są jako sumy kontrolne plików, czy haseł, dzięki którym na za sadzie porównania klucza spodziewanego, z wygenerowanym dla danych otrzymanych, możemy określić poprawność tych danych (czy hasło się zgadza; czy plik został pobrany prawidłowo, nie został zmieniony etc.).

Jak generować klucze algorytmem md5 na systemach Linux?

Większość dystrybucji linuksowych wyposażona jest w program o nazwie md5sum, który jak możemy się spodziewać, służy do generowania hashy przy pomocy algorytmu md5, zarówno z plików jak i stringów. Czyli de facto, nie musimy nawet nic instalować.

Zacznijmy od wygenerowania klucza dla podanego tekstu, np. "www.mblog.boo.pl". Najpopularniejszym rozwiązaniem będzie wydanie polecenia na kształt poniższego:

echo -n "www.mblog.boo.pl" | md5sum
Jak widać, łączymy strumień wyjściowy komendy echo, wyświetlającej wskazany przez nas tekst, ze strumieniem wejścia programu md5sum. Pytanie, dlaczego do polecenia echo dołączamy flagę -n? Otóż gdyby nie ona, do wyświetlanego tekstu dołączony zostałby na początku znak nowego wiersza, który również zostałby uwzględniony podczas liczenia sumy kontrolnej, a jak wspomnieliśmy i jeszcze z resztą pokażemy na przykładzie, nawet niewielka zmiana wejściowych danych, da w rezultacie inny klucz. Zobaczmy najpierw różnicę w pracy komendy echo z flagą -n i bez niej.
mateusz@mateusz-Aspire-5560:~$ echo -n "www.mblog.boo.pl"
www.mblog.boo.pl
mateusz@mateusz-Aspire-5560:~$
mateusz@mateusz-Aspire-5560:~$ echo "www.mblog.boo.pl"
www.mblog.boo.pl

mateusz@mateusz-Aspire-5560:~$
Myślę, że teraz nie ma żadnych wątpliwości, o co chodzi. Czas więc na obliczenie hashy. Zróbmy to również dla przypadku z przekazaniem treści ze znakiem nowego wiersza i bez, aby unaocznić, że klucze faktycznie będą różne (w poniższym przykładzie zostały one wytłuszczone):
$ echo -n "www.mblog.boo.pl" | md5sum
e896cdd076dbcb2318a68477ce0278b4 -
$ echo "www.mblog.boo.pl" | md5sum
2871a91221f1a369d3a1d64a592476ab -
Jak widać, zgodnie z przewidywaniami, klucze są inne. Poniżej bardzo podobna sytuacja, tym razem jednak w treści zamienimy jedną kropkę na przecinek, tak by różnica w przekazanych danych była lepiej widoczna:
$ echo -n "www.mblog.boo.pl" | md5sum
e896cdd076dbcb2318a68477ce0278b4 -
$ echo -n "www.mblog.boo,pl" | md5sum
51a120a9bd3e0944145f5cbfa1422301 -

Wspomniałem, że podejście z użyciem komendy echo, jest najpopularniejsze, ale nie jedyne. Możemy też przekazać tekst do md5sum zwyczajnie uruchamiając go, wpisując to co nas interesuje i zakończyć podawanie danych wysyłając sygnał EOT kombinacją klawiszy Ctrl+D:

$ md5sum
www.mblog.boo.pl<tutaj Ctrl+D>e896cdd076dbcb2318a68477ce0278b4 -
Mimo wszystko polecam stosować metodę z echo, ponieważ jest bardziej czytelna i trudniej o błąd.

A jak obliczyć sumę kontrolną z pliku?

Wiemy już jak obsłużyć stringi z md5sum, teraz czas na pliki. Tutaj sytuacja jest jeszcze prostsza, ponieważ wystarczy przekazać ścieżkę do pliku w argumencie do programu md5sum i wszystko zostanie policzone. Spójrzmy na dwa poniższe przykłady, jeden dla jednego pliku, a drugi dla wielu plików:
$ md5sum plik1.txt
e02b2fc03cc34581db0c3b2182265f99 plik1.txt
$ md5sum *.txt
e02b2fc03cc34581db0c3b2182265f99 plik1.txt
328004b1ecd6d69d41cda3f00efaba36 plik2.txt
afc8a28161d250de6880b4968e0bc5d8 plik3.txt

I to już wszystko, co miałem do przekazania w temacie obliczania kluczy md5 na systemach Linux. Rzecz prosta, a bardzo użyteczna więc dobrze wiedzieć, jak się za nią zabrać.

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: