2010-03-25 2 views
1

MD5 라이브러리를 다양한 언어로 사용할 때 문자 인코딩에 대한 일반적인 질문입니다. 내 관심사입니다 :MD5 해시 크로스 플랫폼을 생성 할 때 문자 인코딩 문제

message = "hello world" 
m = md5() 
m.update(message) 

그럼 내가 사용하는 MD5 해시의 진수 버전을 :

m.hexdigest() 

를하고 메시지를 보내이 같은 기본 파이썬 문자열 객체를 사용하여 MD5 해시를 생성한다고 가정 & 네트워크를 통해 MD5 해시, JMS 메시지 또는 HTTP 요청을 가정 해 봅니다.

이제 체크섬과 함께 원시 Java 문자열의 형태로 Java 프로그램에서이 메시지가 표시됩니다.

String md5 = org.apache.commons.codec.digest.DigestUtils.DigestUtils.md5Hex(s) 

내 느낌이 나는 양쪽 끝에 문자 encodng를 지정하지 않았기 때문에이 잘못된 것입니다 : 그럼 난 (하원 코덱 라이브러리를 사용)이 같은 자바를 사용하여 MD5 해시를 생성합니다. 따라서 원래 해시는 Python 버전의 문자열 바이트를 기반으로합니다. 자바는 문자열의 Java 버전의 바이트를 기반으로합니다.이 두 바이트 시퀀스는 종종 동일하지 않습니다 - 맞습니까? 그래서 정말로 "UTF-8"을 지정해야합니다.

(I 실제로 MD5 체크섬 실패 내 코드에서 간헐적으로 오류가 발생하고, 나는이 이유 의심 -.하지만 간헐적이기 때문에,이를 변경하면 그것을 수정 아닌지 말하기 어렵다)

감사합니다!

답변

1

예. MD5 체크섬은 문자가 아닌 BYTES 시퀀스를 통해 명확해야합니다. 따라서 예측 가능한 문자를 바이트로 변환해야합니다.

0

예, 양 끝에서 동일한 인코딩을 해시하는 것이 좋습니다. 인코딩하기 전에 파이썬 문자열을 유니 코드로 디코딩하십시오.