需求是这样的,在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 0xa4v2 -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))
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧