python3中digest()和hexdigest()区别
转自:https://www.cnblogs.com/yrxns/p/7727471.html
hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法接口,如SHA1、SHA224、SHA256、SHA384、SHA512、MD5等。
其中
hash.digest()
返回摘要,作为二进制数据字符串值
hash.hexdigest()
返回摘要,作为十六进制数据字符串值
举个例子
复制代码
import hashlib
md5 = hashlib.md5()
md5.update("a".encode(‘utf-8‘))
print(u"digest返回的摘要:%s"% md5.digest())
print(u"hexdigest返回的摘要:%s"% md5.hexdigest())
复制代码
结果
digest返回的摘要:b‘x0cxc1uxb9xc0xf1xb6xa81xc3x99xe2iw&a‘
hexdigest返回的摘要:0cc175b9c0f1b6a831c399e269772661
众配宝接口的加密规则是java实现的,转换成python
加密规则:1.请求报文 2.替换请求报文中的字符串(replace("&;s+&;","><")) 3.替换后的字符串+key(‘alogalog‘)
4.第3步获取的字符串md5加密 5.将加密后的字符串base64编码
python实现加密
复制代码
import hashlib
import base64
md5 = hashlib.md5()
a = "
张三
13000000000
431400
甘肃省
兰州市
新洲区
李集街道
天水南路222号
天猫超市
天猫超市仓库
02781739210
430208
甘肃省
兰州市
新洲区
金口街旭光村菜鸟物流园3号库
test0926001
false
2302
7888000
290
170
160
2017-09-22 08:55:04
1
pressureTest
CHENGBANGPEISONG-0001
NJCB-001
C
H1
{‘nextRouteId‘:890,‘nextRouteType‘:2,‘targerRdcType‘:2,‘targetRdcId‘:890}
4859
1619095
CBWL
2017-09-24 23:59:00
108
WLB
ydhtest1341573
LP00079477100697
ddhtest5454253
SB-ZFB
1
1
1619095
晟邦湖北分拨中心
MainWaybillAccess
1619095
MainWaybillAccesstest09260012017-09-22 09:13:11
zpb_chuyan_cb
"
b = a.replace("&;s+&;","><")+"alogalog"
md5.update(b.encode(‘utf-8‘))
b = md5.digest()
print(u"16位md5加密结果:%s"% b)
print(u"16位md5加密结果再进行base64编码:%s" % base64.b64encode(b).decode(‘utf-8‘)
)
复制代码
结果
16位md5加密结果:b‘(xb1xf9xd9xf4x90x90jN;n~x82)FF‘
16位md5加密结果再进行base64编码:KLH52fSQkGpOOwp+gilGRg==
加密结果与java实现的加密结果一致
注意:区分加密是hash.digest() 还是hash.hexdigest(),之前一直用的是hexdigest方法导致加密的结果不正确