OSX 및 Windows에서 파일의 md5 합계를 확인해야하는 스크립트를 작성하고 있습니다. 커맨드 라인 md5
공구, 그러나 나는 다른 결과를 얻는다. 코드는 다음과 같습니다.md5가 명령 줄과 다른 파이썬 출력 (이진 모드에서도)
def MD5File(self, f, block_size=2**20):
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.hexdigest()
with open(path, 'rb') as f:
print MD5File(path)
바이너리 모드에서 파일을 여는 것은 명백하지만 다른 결과가 나타납니다. 내가 한 번에 모든 것을 읽는 것만으로도 데이터를 버퍼링하는 다른 방법을 시도했지만, 파이썬 스크립트는 일관되게 동일한 것을 반환하지만, 이는 md5 명령과는 다릅니다.
그래서 내가 뭘 잘못하고 있는지, 아니면 md5 filename
이 실제로 기대 한대로 작동하지 않는 경우가 있습니까? 파일의 바이너리를 직접 읽고 있기 때문에 개행 문제가 없어야합니다. cat filename | md5
을 실행하면 다른 결과가 다시 나타납니다.
이진 모드에서 파일을 여는 것이 텍스트 파일이 아닌 경우를 제외하고 유닉스와 윈도우가 파일에서 다른 줄 끝을 사용한다는 사실을 변경한다고 생각합니다.이 경우 내 의견은 부적합합니다. 줄 끝을 확인 했니? –
'print MD5File (path)'가 아닌'print MD5File (f)'는 게시에 오타가있는 것뿐입니다. – MattH
가! 내 문제를 발견 : 파일 대신 문자열의 해시를 반환하기 위해 쉘에서'md5' 명령을 재정의 했으므로 실제로 md5 프로그램을 전혀 실행하지 않았습니다. –