python版本坑:md5例子(python2与python3中md5区别)
起步 对于一些字符,python2和python3的md5加密出来是不一样的. # python2.7 pwd = "xxx" + chr(163) + "fj" checkcode = hashlib.md5(pwd).hexdigest() print checkcode # ea25a328180680aab82b2ef8c456b4ce # python3.6 pwd = "xxx" + chr(163) + "fj" checkcode = hashlib.md5(pwd.encode("utf-8")).hexdigest() print(checkcode) # b517e074034d1913b706829a1b9d1b67 按代码差异来将,就是在 checkcode = hashlib.md5(pwd).hexdigest() TypeError: Unicode-objects must be encoded before hashing 这是因为加密时需要将字符串转化为 分析 如果字符串中没有 # python2.7 >>> chr(163) 'xa3' # python3.6 >>> chr(163) 'xa3' 在这里说明通过 # python2.7 >>> bytes(chr(163)) 'xa3' # python3.6 >>> chr(163).encode() b'xc2xa3' python3中,在 解决 # python3.6 pwd = "xxx" + chr(163) + "fj" checkcode = hashlib.md5(pwd.encode("latin1")).hexdigest() print(checkcode) # ea25a328180680aab82b2ef8c456b4ce 额外 先说chr函数,通过 chr(...) chr(i) -> Unicode character Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff. 意思是它返回Unicode编码中指定位置的一个字符.python3内部也是用Unicode表示左右字符,即str类型.而通过 ascii编码中每个字符编码是一个byte,但只有1-127. 超过的部分128-255则属于 因此需要一个含有128-255中的部分字符的编码,且采用1个Byte固定大小编码,比如 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |