我的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
我想可能是额外的=来避免不正确的填充,但是我的键以一个=结束
Node.js
Buffer.from(..., 'base64')
可以使用“urlsafe”base64(https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings)中的输入,_
对于python来说不是有效的base64字符,而对于节点来说则是将与Base64的“urlsafe”版本相对应的
altchars
添加到python代码中会产生相同的哈希值此外,python的
b64decode
具有validate
kwarg,它将检查输入字符串并“大声失败”,而不是忽略不正确的字符相关问题 更多 >
编程相关推荐