Ngu*_*Huy 5 python openssl hmac
和:
KEY='7vgd39eyxald9sucClM7'
DATA='POST\nmultipart/form-data\nWed, 10 Jun 2015 07:27:43 GMT\n/1/classes/item\nx-wbs-uid:f886a495220975d724ff3679a5cc9cef04343076'
Run Code Online (Sandbox Code Playgroud)
在命令行中
HASH_BIN=`echo -n "$DATA" | openssl dgst -sha256 -mac HMAC -macopt key:$KEY -binary`
openssl enc -e -base64 <<< $HASH_BIN
result: VmBdzRcNg0OJZVVLSgg1zcViflug9iqtb6Gsnjqf9F8K
Run Code Online (Sandbox Code Playgroud)
在蟒蛇
import hmac, hashlib, base64
hash = hmac.new(KEY, DATA, hashlib.sha256).digest()
base64.encodestring(hash).strip()
result: u6Poj7Jqrz6+wvXDNyK88pVm5iKUF6RUmq2P2LtHmuE=
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗???非常感谢。
它应该是由DATA
python 代码中的字符串定义引起的。
您需要添加r
将其DATA
视为原始字符串,例如
DATA=r'POST\nmultipart/form-data\nWed, 10 Jun 2015 07:27:43 GMT\n/1/classes...'
Run Code Online (Sandbox Code Playgroud)
使用r
,所有转义码都DATA
将被忽略。也就是说,'\n' 将被视为换行符,而 r'\n' 将被视为 \ 后跟 n 的字符。在 Python 中,
'\n' // 0x0d
r'\n' // 0x5c 0x6e
Run Code Online (Sandbox Code Playgroud)
使用r
,它将输出等于通过 openssl 输出的结果,
VmBdzRcNg0OJZVVLSgg1zcViflug9iqtb6Gsnjqf9F8K
Run Code Online (Sandbox Code Playgroud)