Soru Neden boş dosyalar ve dizeler md5sums üretiyor?


Aşağıdakileri göz önünde bulundur:

% md5sum /dev/null
d41d8cd98f00b204e9800998ecf8427e  /dev/null
% touch empty; md5sum empty
d41d8cd98f00b204e9800998ecf8427e  empty
% echo '' | md5sum
68b329da9893e34099c7d8ad5cb9c940  -
% perl -e 'print chr(0)' | md5sum
93b885adfe0da089cdf634904fd59f71  -
% md5sum ''
md5sum: : No such file or directory

Her şeyden önce, tüm bu komutların çıktısı beni şaşırttı. Eğer bir şey varsa, toplamın hepsinin aynı olmasını beklerdim.


35
2018-06-06 07:31


Menşei




Cevaplar:


"Hiçbir şey" in md5sumu (sıfır uzunluktaki bir karakter akışı) ilk iki örneğinizde gördüğünüz d41d8cd98f00b204e9800998ecf8427e'dir.

Üçüncü ve dördüncü örnekler tek bir karakteri işlemektedir. "Yankı" durumunda, bu bir satırsonu, yani.

$ echo -ne '\n' | md5sum
68b329da9893e34099c7d8ad5cb9c940 -

Perl örneğinde, 0x00 değerine sahip tek bir bayttır, yani.

$ echo -ne '\x00' | md5sum
93b885adfe0da089cdf634904fd59f71 -

Aşağıdaki gibi "echo" kullanarak boş sağlama toplamını yeniden üretebilirsiniz:

$ echo -n '' | md5sum
d41d8cd98f00b204e9800998ecf8427e -

... ve Perl'i aşağıdaki gibi kullanarak:

$ perl -e 'print ""' | md5sum
d41d8cd98f00b204e9800998ecf8427e  -

Her dört durumda da, aynı çıktıyı aynı veriyi kontrol etmekten beklemelisiniz, ancak farklı veriler çılgınca farklı bir sağlama toplamı üretmelidir (bütün bu nokta - sadece tek bir karakter olsa bile).


69
2018-06-06 07:39



...veya perl -e '' - minmaxavg


Neden boş dosyalar ve dizeler md5sums üretiyor?

Çünkü "toplam" içinde md5sum biraz yanıltıcıdır. Ör. CRC32 sağlama toplamı, boş dosya için sıfırdır.

MD5, mesaj özeti algoritmalarından biridir. Kendi iç durumuna bağlı olarak sabit uzunlukta rasgele görünen değer (karma) üreten bir kutu olarak hayal edebilirsiniz. Verileri besleyerek dahili durumu değiştirirsiniz.

Ve bu kutu içsel durumu önceden tanımlanır, böylece herhangi bir veri girilmeden önce rastgele görünen sağlama değeri verilir. MD5 için, d41d8cd98f00b204e9800998ecf8427e.


10
2017-12-15 21:51



Biraz daha kesin olmak gerekirse: MD5 dahili olarak mesajın sonuna bir dolgu bloğu ekleyecektir. Böylece, hash değeri, bu doldurma bloğu üzerindeki karma fonksiyonunun, başlangıçtaki durumun tam olarak değil, çatlatılmasının sonucudur. - nneonneo


Sürprize gerek yok. İlk iki md5sum için gerçek boş girdiler üretir. Yankı yeni bir satır oluşturur (echo -n '' boş bir çıktı üretmeli; Benim kontrol etmek için bir linux makinem yok. Perl, tek bir sıfır bayt üretir (dizgenin sonuna sıfır bayt işareti koyulduğunda C ile karıştırılmamalıdır). Son komut, dosya adı olarak boş dizgiye sahip bir dosya arıyor.


2
2018-06-06 07:46