Python에서 만든 MD5 해시가 쉘에서 echo 및 md5sum을 사용하여 만든 것과 다른 이유는 무엇입니까?


109

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

답변:


198

echo\n일반적으로 쉘에서 줄 바꿈으로 끝나지 않는 줄을 원하지 않기 때문에 a를 추가합니다 (프롬프트가 맨 왼쪽에서 시작하지 않으면 정말보기 흉해 보입니다). 인수를
사용하여 -n후행 줄 바꿈을 생략하면 Python 스크립트와 동일한 체크섬이 인쇄됩니다.

> echo -n mystringforhash | md5sum
86b6423cb6d211734fc7d81bbc5e11d3  -

53
실제로 이것은 내가 사람들에게 쉘 스크립트에서 일반적으로 더 잘 수행되는 것으로 생각되는 작업을 위해 쉘 스크립트 대신 더 많은 Python 또는 더 높은 수준의 언어를 사용하도록 말할 때 사용하는 큰 예 중 하나입니다. 혼합 된 데이터와 코드의 특성과 각 명령에 대한 다른 구문은 모두 쉘 스크립트를 눈에 띄지 않게 오류가 발생하기 쉽게
만듭니다

7
주어진 것이 "쉘"뿐이라면 echo실행 가능한 -n플래그 가 있다고 믿을 수 없습니다 . POSIX는 다음과 같이 말합니다 echo. "첫 번째 피연산자가 -n이거나 피연산자에 <backslash>문자가 포함 된 경우 결과는 구현에 따라 정의됩니다." (출처 : pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html ). printf대신 사용하십시오 .
Mikko Rantalainen

문제는 에코가 아니라 md5sum (현재 Mac에서는 md5)과 끝에 \ n을 추가하는
shasum에 있습니다

@Punnerud : 아니요.의 출력은 md5sum여기서 중요하지 않습니다. 입력합니다. 를 사용하지 않으면 -necho는 줄 바꿈을 추가하여 다른 해시를 생성합니다.
ThiefMaster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.