import base64
import hmac
from hashlib import sha1
import json
def hash_hmac_sign(code, key, sha1):
hmac_code = hmac.new(key.encode(), code.encode(), sha1).digest()
return base64.b64encode(hmac_code).decode()
if __name__ == '__main__':
strb = {
"version": "2.0",
"access_code": "P000270",
"timestamp": "1643251754",
"device_id": "89852022018041800193",
}
strb2 = str(strb)
key_P000270 = "cfIAKh8O5ARL6HKAyUWUDYIZ64oZBJdW"
'''
data = json.dumps(strb, sort_keys=True, indent=4, separators=(',', ': ')) #indent=4 展示的样式
sort_keys是告诉编码器按照字典key排序(a到z)输出
indent参数根据数据格式缩进显示,读起来更加清晰, indent的值,代表缩进空格式
separators参数的作用是去掉‘,’ ‘:’后面的空格,在传输数据的过程中,越精简越好,冗余的东西全部去掉。
skipkeys参数,在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,那么在编码过程中就会抛出ValueError的异常。skipkeys可以跳过那些非string对象当作key的处理.
ensure_ascii=False (False输出中文、True输出ascii编码),json.dumps 序列化时对中文默认使用的ascii编码
'''
data = json.dumps(strb, sort_keys=True, separators=(',', ':'), ensure_ascii=False)
print(data)
print(hash_hmac_sign(data, key_P000270, sha1))