2012-08-16 2 views
0

hashlib에 대해 이해하지 못했습니다. 왜 일반 바이트 객체를 디코딩 할 수 있는지 모르겠지만 바이트 객체로 반환되는 해시는 디코딩 할 수 없습니다. 이 오류가 계속 :Python hashlib & Bytes 객체의 decode()

UnicodeDecodeError을 'UTF-8'코덱의 위치는 1 바이트 0xad를 디코딩 할 수 없습니다 무효 시작 바이트

여기이 오류를 생산의 내 테스트 코드입니다. 이 오류는 줄에 8 (h2 = h.decode('utf-8'))

import hashlib 

pw = '[email protected])r' 
salt = 'b7u2qw^T&^#[email protected])hvx7ivRoxr^tDyua' 
pwd = pw + salt 
h = hashlib.sha512(pwd.encode('utf-8')).digest() 
print(h) 
h2 = h.decode('utf-8') 
print(h2) 

내가 해시하지 않으면이 완벽하게 잘 작동 ...

>>> pw = '[email protected])r' 
>>> salt = 'b7u2qw^T&^#[email protected])hvx7ivRoxr^tDyua' 
>>> pwd = pw + salt 
>>> h = pwd.encode('utf-8') 
>>> print(h) 
b'[email protected])rb7u2qw^T&^#[email protected])hvx7ivRoxr^tDyua' 
>>> h2 = h.decode('utf-8') 
>>> print(h2) 
[email protected])rb7u2qw^T&^#[email protected])hvx7ivRoxr^tDyua 

그래서 내가 대해 뭔가를 이해 아니에요 같은데요

해시,하지만 내가 실종 된 단서가 없습니다.

+1

해시는 텍스트가 아닌 바이트 문자열이므로 해독 할 수 없습니다. 해시 텍스트 형식을 원한다면 아마도 .hexdigest()를 사용하고 싶을 것입니다. – gps

답변

0

두 번째 예에서는 UTF-8로 인코딩 한 다음 결과를 곧바로 디코딩합니다.

첫 번째 예에서는 UTF-8로 인코딩하고, 바이트를 어지럽히 며 UTF-8 인 것처럼 해독하려고합니다. 결과 바이트가 여전히 UTF-8로 유효한지 여부는 순전히 우연히 발생합니다 (그리고 여전히 유효한 UTF-8 인 경우에도 해당 문자가 나타내는 유니 코드 문자열은 원래 문자열과 아무런 관련이 없습니다).