Почему хеш MD5, созданный Python, отличается от созданного с помощью echo и md5sum в оболочке?
Атрибут Python MD5 отличается от хэша, созданного командой md5sum в оболочке. Почему?
>>> import hashlib
>>> h = hashlib.md5()
>>> h.update("mystringforhash")
>>> print h.hexdigest()
86b6423cb6d211734fc7d81bbc5e11d3 # Result from Python
$ echo mystringforhash | md5sum
686687dd68c5de717b34569dbfb8d3c3 - # Result on the shell
Ответы
Ответ 1
echo
добавляет \n
, так как обычно вам не нужны строки, не заканчивающиеся на строку в вашей оболочке (это выглядит очень уродливо, если приглашение не начинается в самом левом).
Используйте аргумент -n
, чтобы опустить завершающий разрыв строки, и он напечатает ту же контрольную сумму, что и ваш python script:
> echo -n mystringforhash | md5sum
86b6423cb6d211734fc7d81bbc5e11d3 -