有效负载包含 HMAC 标签以及 AES 的随机数。客户端打印标签和随机数结果(例如):
#tag: b'=x\x9d{_0\xf9;c8\x94inc]\xb1'
#nonce: b'\x1f\xf4\xbe\xcc\xf2\x84f\xf2*\x8dP\x16\xc8\x02\xfe\xbe'
requests.post(url, data=payload, headers={"Content-Type": "application/octet-stream"}, verify="myShnazzyCertificate.pem")
服务器端,我的 Flask api 路由接收到一个明显经过 urlencoded 的标签和随机数:
data = flask.request.data
## stuff happens here, then -> print("tag: ", tag); print("nonce: ", nonce)
#tag: b'%3Dx%9D%7B_0%F9%3Bc8%94inc%5D%B1'
#nonce: b'%1F%F4%BE%CC%F2%84f%F2%2A%8DP%16%C8%02%FE%BE'
如何删除 urlencoding(或防止其发生?),同时保留标记和随机数作为字节码?我试过:
tag = tag.replace(b"%", bytes(r"\x".encode("utf-8")))
nonce = nonce.replace(b"%", bytes(r"\x".encode("utf-8")))
但是 HMAC 验证失败,因为标签有“{”,随机数有“*”,它也被编码了,所以我需要更详尽的东西。
虽然可能有一种方法可以使用
"Content-Type": "application/octet-stream"
来发送二进制参数,但我一直认为它是用于文件的。
我建议不要通过 HTTP 发送二进制参数,方法是将二进制文件转换为 url 安全文本并返回,例如base64