2017-12-30 9 views
1

이 문제는 매우 일반적이며 직관적 인 문제로 생각되지만 검색해 보았습니다.순차 SHA 256 해시가 동일한 입력에 대해 서로 다른 출력을 제공합니다.

저는 초심자 파이썬 사용자입니다. 주로 독학입니다. 나는 상당히 간단한 운동이 될 것이라고 생각했던 것을 시도하고있다. 입력 구문에서 해쉬 값을 생성하는 것이다.

import hashlib 
target = input("Give me a phrase: ").encode('utf-8') 
hashed_target = hashlib.sha256(target) 
print(hashed_target) 

나는 이것을 실행하고 프롬프트를 얻을 : 나에게 문구 보내기 여기 내 코드입니다! "나에게 자유가 아니면 죽음을 달라"

내가 문구를 입력을 해시 출력은 0x7f8ed43d6a80입니다.

테스트하기 위해 동일한 구문으로 다시 시도했지만 다른 출력을 얻었습니다 : 0x7f1cc23bca80.

이상하게 생각하여 원본 입력을 복사하여 붙여 넣은 다음 세 번째 다른 해시 출력을 받았습니다. 0x7f358aabea80.

간단한 설명이 있어야합니다. 나는 오류가 없으며 코드는 간단 해 보이지만 해시는 비슷하지만 확실히 다릅니다.

누군가 도움을 줄 수 있습니까?

+1

을, 나는 정확히 같은 변수마다 시간을 사용하는 코드를 다시 썼다. 수입 hashlib 대상 = ('UTF-8') hashed_target = hashlib.sha256 (대상) 인쇄 (hashed_target) 나는이 세 번 실행하고있어 "나에게 자유가 아니면 죽음을 달라!". 인코딩 세 가지 해시 출력. '0x7f7472104a80' '0x7fb113db6a80' '0x7f3e5051ea80' –

+1

당신은 귀하의 의견을 추가해야 편집과 같은 질문 : 내가 볼 생각 –

답변

9

__repr__ 문자열에 메모리 주소를 반환하는 개체를 직접 인쇄하고 있습니다. 당신은 해시 얻기 위해 hexdigest 또는 digest 방법을 사용해야합니다 테스트로

>>> import hashlib 
>>> testing=hashlib.sha256(b"sha256 is much longer than 12 hex characters") 
>>> testing 
<sha256 HASH object @ 0x7f31c1c64670> 
>>> hashed_testing=testing.hexdigest() 
>>> hashed_testing 
'a0798cfd68c7463937acd7c08e5c157b7af29f3bbe9af3c30c9e62c10d388e80' 
>>> 
+0

에 "나는 그의 테스트하기 위해 무슨 짓을". 입력 문구를 인코딩 할 때 인쇄 할 수 없도록 만들었고 'hashlib.sha256'의 출력은 문자열이나 숫자가 아닙니다. 인터프리터에서'type '을 입력하면'class'_hashlib.HASH '를 얻습니다. 'hexdigest' 메쏘드는 그것을 16 진수 문자열로 다시 변환합니다. 그 맞습니까? –

+0

정말 전환이 아닙니다. 해싱 메소드는 결과 해시를 캡슐화하는 "sha256 HASH 객체"를 반환하고, "hexdigest"는 해시에 대한 getter 메소드를 반환합니다. 'digest' 메쏘드는 raw 다이제스트를'bytes' 객체로 리턴합니다. – rlee827

+0

많은 감사. 나는 코드에'hexdigest()'메소드를 추가하고 적절한 SHA256 출력을 주었다. 그리고 나는 배웠다. :) –

관련 문제