python 中文Unicode 转单字节字符 16进制转有符号整型

需求是这样的,在python 中将中文字符取单字节的值,转换为有符号整型作为参数送进MD5。别问我为什么,因为网上有个博主(是谁我就不点名了,搜索排名比较靠前的)使用java写了MD5代码,结果只支持单字节,对多字节语言字符就会得出错误的摘要计算结果;令人沮丧的是,这段代码还被很多公司的程序员复制粘贴采用作为加密验证方式,产品已经上线运营,没法修正错误,只能将错就错。

这个功能其他语言实现起来很简单,因为只要强制转换为单字节字符就可以实现,但是python中byte只支持正的,找了很久没有类似的功能,查了很多资料,终于辗转完成这个功能,如果有其他更简便的方法,还望多多赐教。这个复杂的方法暂时先用着。

from bitstring import BitArray
import array

v0 = '粤'.encode('raw_unicode_escape')[-2:]
print("v0",v0,type(v0))

v1 ='0x'+v0.decode("utf8")
print("v1",v1,type(v1))

v2 = BitArray(v1)
print("v2",v2.int)

lst = list([v2.int])
print("lst",lst)
btemp = array.array('b', lst)
print("btemp",btemp)

输出结果:

v0 b'a4' 
v1 0xa4 
v2 -92
lst [-92]
btemp array('b', [-92])

顺便附上其他一些转换的方法共参考

v1 = bytes('渝', encoding='utf-8')
print("v1",v1,type(v1))

v2 = bytes('渝', encoding='utf-8').hex()
print("v2",v2,type(v2))

v3 = bytes.fromhex(v2)
print("v3",v3,type(v3))

v4 = binascii.a2b_hex(v2)
print("v4",v4,type(v4))

v5 =binascii.hexlify(v4)
print("v5",v5,type(v5))

v6 = binascii.b2a_hex(v4)
print("v6",v6,type(v6))

v7 = binascii.hexlify(v6)	
print("v7",v7,type(v7))

v8 = binascii.b2a_hex(v6)
print("v8",v8,type(v8))

你可能感兴趣的:(Python,python,开发语言)