md5 해시 파이썬 개체에 함수를 쓰려고합니다. 그리고 python2와 python3에서 동일한 md5 값을 반환합니다.python2,3에서 pickle.dumps 호환성
나는 python3에서 pickle.dumps를 알고 바이트를 반환하고 python2에서는 str을 반환합니다.
print([ pickle.dumps(obj, protocol = 2) ]) # in python2
print([ str(pickle.dumps(obj, protocol = 2)) ]) # in python3
모두가 나에게 제공 : 다음 코드는 나에게 지금 같은 문자열을 제공합니다 볼 수 있듯이
['\x80\x02]q\x00(U\x011q\x01K\x02U\x013q\x02K\x04e.']
그러나 문제는 python3에 있다는 것입니다 :
hashlib.md5.update(some_string)
가있다 인코딩 할 수 있습니다. 파이썬 3에서 문자열을 인코딩하면 파이썬 2에서와 같은 md5 값을주지 않을 것입니다. 누가 해결책을 줄 수 있습니까? 고마워. 그래서 인쇄가 잘못,
from __future__ import print_function
import hashlib
import pickle
import sys
is_py2 = (sys.version_info[0] == 2)
obj = ['1',2,'3',4]
m = hashlib.md5()
if is_py2: # if it's python2
print( [ pickle.dumps(obj, protocol = 2) ])
m.update( pickle.dumps(obj, protocol = 2) )
else: # if it's python3
print( [ str(pickle.dumps(obj, protocol = 2)) ])
m.update( pickle.dumps(obj, protocol = 2).encode("utf-8")) # I wish I could don not encode
print(m.hexdigest())
개체의 md5 값을 py2,3에서 동일하게 만드는 코드를 제공해 주시겠습니까? – MacSanhe