首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >openssl hmac与python hmac不同

openssl hmac与python hmac不同
EN

Stack Overflow用户
提问于 2015-06-22 15:19:23
回答 1查看 2.2K关注 0票数 5

通过以下方式:

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

在命令行中

代码语言:javascript
复制
HASH_BIN=`echo -n "$DATA" | openssl dgst -sha256 -mac HMAC -macopt key:$KEY -binary`
openssl enc -e -base64 <<< $HASH_BIN
result: VmBdzRcNg0OJZVVLSgg1zcViflug9iqtb6Gsnjqf9F8K

在python中

代码语言:javascript
复制
import hmac, hashlib, base64
hash = hmac.new(KEY, DATA, hashlib.sha256).digest()
base64.encodestring(hash).strip()
result: u6Poj7Jqrz6+wvXDNyK88pVm5iKUF6RUmq2P2LtHmuE=

有人能帮我一下吗?非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2015-06-23 19:04:48

这应该是由python代码中的DATA字符串定义引起的。

您需要添加r以将DATA视为原始字符串,例如

代码语言:javascript
复制
DATA=r'POST\nmultipart/form-data\nWed, 10 Jun 2015 07:27:43 GMT\n/1/classes...'

使用r时,DATA中的所有转义代码都将被忽略。也就是说,'\ n‘将被视为换行符,而r'\n’将被视为后跟n的字符。在Python中,

代码语言:javascript
复制
'\n'  // 0x0d

r'\n' // 0x5c 0x6e 

使用r,它将通过openssl输出等于输出的结果,

代码语言:javascript
复制
VmBdzRcNg0OJZVVLSgg1zcViflug9iqtb6Gsnjqf9F8K
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30974080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档