AES+sha256
加密签名认证方案,使用AES对请求参数和响应数据做加密处理, 对请求参数和响应数据做sha256
摘要签名。airudderredduria
,实际生产使用的密钥请先和我们联系。示例中使用python语言,实际语言可自行选择。
def aes_encrypt(text, aeskey):
"""aes加密"""
if isinstance(text, str):
text = text.encode("utf8")
enc_secret = AES.new(aeskey.encode("utf-8"), AES.MODE_ECB)
# ECB的一种填充方式。 ECB要求输入明文长度必须是块长度的整数倍,因此text必须填充至满足要求。本文档里约定使用 "\0" 进行补位。
tag_string = text + (AES.block_size - len(text) % AES.block_size) * b"\0"
cipher_text = base64.b64encode(enc_secret.encrypt(tag_string))
return cipher_text
def aes_decrypt(text, aeskey):
"""aes解密"""
if isinstance(text, str):
text = text.encode("utf8")
dec_secret = AES.new(aeskey.encode("utf-8"), AES.MODE_ECB)
raw_decrypted = dec_secret.decrypt(base64.b64decode(text))
clear_val = raw_decrypted.rstrip(b"\0")
return clear_val
utf-8
编码,取其sha256
摘要的16进制的小写值示例中使用python语言,实际语言可自行选择。
def sha256_sign(text):
"""sha256签名"""
if isinstance(text, str):
text = text.encode("utf8")
return hashlib.sha256(text).hexdigest()
Is-Encrypted
1 标记是否加密Signed
xxx 标记sha256的签名值{
"Is-Encrypted": "1",
"Signed": "6956d7af4c89b89f19f9ae0a8be4bcf12abe7c6ed893691733f3480ad3f3aabc"
}
sha256
签名值放到header中。在发送请求即可Is-Encrypted
1 标记是否加密Signed
xxx 标记sha256的签名值