簡體   English   中英

openssl hmac與python hmac不同

[英]openssl hmac differ from python hmac

有:

KEY='7vgd39eyxald9sucClM7'
DATA='POST\nmultipart/form-data\nWed, 10 Jun 2015 07:27:43 GMT\n/1/classes/item\nx-wbs-uid:f886a495220975d724ff3679a5cc9cef04343076'

在命令行中

HASH_BIN=`echo -n "$DATA" | openssl dgst -sha256 -mac HMAC -macopt key:$KEY -binary`
openssl enc -e -base64 <<< $HASH_BIN
result: VmBdzRcNg0OJZVVLSgg1zcViflug9iqtb6Gsnjqf9F8K

在python中

import hmac, hashlib, base64
hash = hmac.new(KEY, DATA, hashlib.sha256).digest()
base64.encodestring(hash).strip()
result: u6Poj7Jqrz6+wvXDNyK88pVm5iKUF6RUmq2P2LtHmuE=

有人可以給我一個幫助嗎? 非常感謝。

它應該是由python代碼中的DATA字符串定義引起的。

您需要添加r以將DATA視為原始字符串,例如

DATA=r'POST\nmultipart/form-data\nWed, 10 Jun 2015 07:27:43 GMT\n/1/classes...'

使用r ,將忽略DATA所有轉義碼。 也就是說,'\\ n'將被視為換行符,但r'\\ n'將被視為字符\\后跟n。 在Python中,

'\n'  // 0x0d

r'\n' // 0x5c 0x6e 

使用r ,它將輸出結果等於通過openssl輸出,

VmBdzRcNg0OJZVVLSgg1zcViflug9iqtb6Gsnjqf9F8K

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM