Node&python不返回相同的hash256

2024-09-29 23:29:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我的NodeJS&;Python脚本不返回相同的哈希值,是什么导致此问题

Node.js

const { createHmac } = require("crypto");
var message = 'v1:1583197109:'
var key = 'Asjei8578FHasdjF85Hfjkasi875AsjdiAas_CwueKL='
const digest = Buffer.from(key, "base64");
const hash = createHmac("sha256", digest)
  .update(message)
  .digest("hex");

console.log(hash)
> 7655b4f816dc7725fb4507a20f2b97823979ea00b121c84b76924fea167dcaf7

Python3

message = 'v1:1583197109:'
key = 'Asjei8578FHasdjF85Hfjkasi875AsjdiAas_CwueKL=' + '=' #add a "=" to avoid incorrect padding
digest = base64.b64decode(key.encode('utf-8'))
hash_ = hmac.new(digest, message.encode('utf-8'), hashlib.sha256)
hash_result = hash_.hexdigest()
print(hash_result)
> c762b612d7c56d3f9c95052181969b42c604c2d41b7ce5fc7f5a06457e312d5b

我想可能是额外的=来避免不正确的填充,但是我的以一个=结束


Tags: keymessagevarhashresultutfencodev1
1条回答
网友
1楼 · 发布于 2024-09-29 23:29:56

Node.jsBuffer.from(..., 'base64')可以使用“urlsafe”base64(https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings)中的输入,_对于python来说不是有效的base64字符,而对于节点来说则是

将与Base64的“urlsafe”版本相对应的altchars添加到python代码中会产生相同的哈希值

const { createHmac } = require("crypto");
var message = 'v1:1583197109:'
var key = 'Asjei8578FHasdjF85Hfjkasi875AsjdiAas_CwueKL='

const digest = Buffer.from(key, "base64");
const hash = createHmac("sha256", digest)
  .update(message)
  .digest("hex");

console.log(hash) // 7655b4f816dc7725fb4507a20f2b97823979ea00b121c84b76924fea167dcaf7
message = 'v1:1583197109:'
key = 'Asjei8578FHasdjF85Hfjkasi875AsjdiAas_CwueKL=' + '=' #add a "=" to avoid incorrect padding
digest = base64.b64decode(key.encode('utf-8'), altchars='-_')
hash_ = hmac.new(digest, message.encode('utf-8'), hashlib.sha256)
hash_result = hash_.hexdigest()
print(hash_result) # 7655b4f816dc7725fb4507a20f2b97823979ea00b121c84b76924fea167dcaf7

此外,python的b64decode具有validatekwarg,它将检查输入字符串并“大声失败”,而不是忽略不正确的字符

相关问题 更多 >

    热门问题