python - 为什么这段代码中 Python 和 Node.js 的 HMAC 结果不同?

标签 python node.js hmac

最近有一个任务是让HMAC与API服务器通信。 我得到了一个 node.js 版本的示例代码,它使消息的 HMAC。使用概念和示例,我必须制作一个与 node.js 版本等效的 python 代码,但结果不同,但我不知道为什么。

请检查这两个代码并帮助找出不同之处。

python 3.0

import hmac
import string
import hashlib
import base64

secret = 'PYPd1Hv4J6'
message = '1515928475.417'
key = base64.b64encode(secret.encode('utf-8'))

hmac_result = hmac.new(key, message.encode('utf-8'), hashlib.sha512)
print(base64.b64encode(hmac_result.digest()))

结果(Python 3.6)

b'7ohDRJGMGYjfHojnrvNpM3YM9jb+GLJjbQvblzrE17h2yoKfIRGEBSjfOqQFO4iKD7owk+gSciFxFkNB+yPP4g=='

Node.JS

var crypto = require('crypto');

var secret = 'PYPd1Hv4J6';
var message = '1515928475.417'
var key = Buffer(secret, 'base64');

var hmac = crypto.createHmac('sha512', key);
var hmac_result = hmac.update(message).digest('base64');
console.log(hmac_result)

结果(Node.JS 6.11)

m6Z/FxI492VXKDc16tO5XDNvty0Tmv0b1uksSbiwh87+4rmg43hEXM0WmWzkTP3aXB1s5rhm05Hu3g70GTrdEQ==

最佳答案

你的输入键不一样,输出的也会不一样。

Node :

var secret = 'PYPd1Hv4J6';
var message = '1515928475.417'
var key = Buffer(secret, 'base64'); // buffer of bytes from the base64-encoded string 'PYPd1Hv4J6'
                                    //  <Buffer 3d 83 dd d4 7b f8 27>

python :

secret = 'PYPd1Hv4J6'
message = '1515928475.417'
key = base64.b64encode(secret.encode('utf-8')) # did you mean b64decode here?

关于python - 为什么这段代码中 Python 和 Node.js 的 HMAC 结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303874/

相关文章:

python - django 中 OneToOneField 的数据迁移

javascript - 如何将 Lighthouse CI 设置为仅测试可访问性?

python - 如何在 python 中执行 <xor> 例如enc_price = pad <xor> 价格

python - 如何创建一个对象,并从 POST 中的 id 链接到嵌套对象

python - 我如何在 Python 中为 discord 机器人创建重新加载命令?

python - 了解类装饰器在 Python 中的工作原理

python - 同一台服务器上的 2 个应用程序,不同的端口。第一个应用程序看不到第二个

node.js - 使用 gitlab ci cd 管道时访问 Node js 应用程序中的环境变量

java - Java 中的 Amazon S3 策略签名

c++ - 在 Crypto++ 中使用 Curve25519 签名