需求是這樣的,在python 中將中文字符取單字節(jié)的值,轉(zhuǎn)換為有符號(hào)整型作為參數(shù)送進(jìn)MD5。別問(wèn)我為什么,因?yàn)榫W(wǎng)上有個(gè)博主(是誰(shuí)我就不點(diǎn)名了,搜索排名比較靠前的)使用java寫(xiě)了MD5代碼,結(jié)果只支持單字節(jié),對(duì)多字節(jié)語(yǔ)言字符就會(huì)得出錯(cuò)誤的摘要計(jì)算結(jié)果;令人沮喪的是,這段代碼還被很多公司的程序員復(fù)制粘貼采用作為加密驗(yàn)證方式,產(chǎn)品已經(jīng)上線運(yùn)營(yíng),沒(méi)法修正錯(cuò)誤,只能將錯(cuò)就錯(cuò)。
這個(gè)功能其他語(yǔ)言實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,因?yàn)橹灰獜?qiáng)制轉(zhuǎn)換為單字節(jié)字符就可以實(shí)現(xiàn),但是python中byte只支持正的,找了很久沒(méi)有類(lèi)似的功能,查了很多資料,終于輾轉(zhuǎn)完成這個(gè)功能,如果有其他更簡(jiǎn)便的方法,還望多多賜教。這個(gè)復(fù)雜的方法暫時(shí)先用著。
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)
輸出結(jié)果:
v0 b'a4'v1 0xa4v2 -92
lst [-92]
btemp array('b', [-92])
順便附上其他一些轉(zhuǎn)換的方法共參考
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))
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧