2011-04-17 14 views
97

Python MD5 karması, kabuktaki md5sum komutu tarafından oluşturulandan farklı. Niye ya? genellikle hatları (istem çok soldaki başlamaz eğer gerçekten çirkin görünüyor) sizin kabuğunda bir satır aralığı ile biten değil istemiyoruz çünküNeden bir MD5 hashı, Python tarafından oluşturulan kabuktan eko ve md5sum kullanılarak oluşturulandan farklı?

>>> import hashlib 
>>> h = hashlib.md5() 
>>> h.update("mystringforhash") 
>>> print h.hexdigest() 
86b6423cb6d211734fc7d81bbc5e11d3 # Result from Python 


$ echo mystringforhash | md5sum 
686687dd68c5de717b34569dbfb8d3c3 - # Result on the shell 

cevap

183

echo bir \n ekler.
sondaki linebreak çıkarmanıza -n argüman kullanın ve sizin piton komut aynı toplama yazdırır:

> echo -n mystringforhash | md5sum 
86b6423cb6d211734fc7d81bbc5e11d3 - 
+50

Aslında bu Python ya da higer seviyesini daha kullanmaya insanlara söyle kullanabileceğim büyük örneklerinden biridir Kabuk betikleri yerine daha iyi yapılmış olduğu düşünülen çalışma için kabuk betikleri yerine diller. Karma veri ve kodun doğası ve her komut için farklı bir sözdizimi, kabuk betiklerini görünmez biçimde hata yapan – jsbueno

+6

yapar. Verilen tek şey "bir kabuk" ise, "yankı" ile çalışabilir bir "-n" bayrağına güvenemezsiniz. POSIX, "echo" hakkında aşağıdakileri söyler: "İlk işlenen" -n "ise veya işlenenlerden herhangi biri bir" "karakteri içeriyorsa, sonuçlar uygulama tanımlıdır." (kaynak: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html). Bunun yerine 'printf' kullanın. –