javascript - 生成 JSON 的 md5 哈希并在 Python 和 JavaScript 中进行比较

标签 javascript python hash md5

我有一个用例,我必须生成 JSON 对象的 md5 哈希,并比较服务器和浏览器中的哈希。

浏览器客户端生成散列,然后向服务器询问同一资源的散列[恰好是一个 JSON 对象],并比较两个散列以决定下一步做什么。

对于服务器,我使用 Python,浏览器客户端使用 Javascript

对我来说,两种情况下生成的哈希值都不匹配。这是我的代码:

Python:

>>> import hashlib
>>> import json

>>> a = {"candidate" : 5, "data": 1}
>>> a = json.dumps(a, sort_keys = True).encode("utf-8")
>>> hashlib.md5(a).hexdigest()
>>> 12db79ee4a76db2f4fc48624140adc7e

JS: 我正在使用 md5用于在浏览器中散列

> var hash = require("md5")
> var data = {"candidate":5, "data":1}
> data = JSON.stringify(data)
> md5(data)
> 92e99f0a99ad2a3b5e02f717a2fb83c2

我做错了什么?

最佳答案

您假设这两种语言生成的 JSON 看起来完全相同。

>>> json.dumps({"candidate" : 5, "data": 1}, sort_keys=True)
'{"candidate": 5, "data": 1}'

js> JSON.stringify({"candidate" : 5, "data": 1})
"{\"candidate\":5,\"data\":1}"

幸运的是,他们可以。

>>> a = json.dumps({"candidate" : 5, "data": 1}, sort_keys=True, indent=2)
'{\n  "candidate": 5,\n  "data": 1\n}'

js> var a = JSON.stringify({"candidate" : 5, "data": 1}, null, 2)
"{\n  \"candidate\": 5,\n  \"data\": 1\n}"

现在哈希值也会相同。

python :

>>> hashlib.md5(a.encode("utf-8")).hexdigest()
>>> d77982d217ec5a9bcbad5be9bee93027

JS:

>>> md5(a)
>>> d77982d217ec5a9bcbad5be9bee93027

关于javascript - 生成 JSON 的 md5 哈希并在 Python 和 JavaScript 中进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51359943/

相关文章:

javascript - 为什么这个 javascript 函数返回 undefined ?

python - 如何使用 tkinter 使用网格函数显示不同的图像?

python - 如何以不可知对象是列表还是字典的方式迭代对象?

algorithm - 如何计算树的哈希值

javascript - 从 iframe 获取 url 并在浏览器 url 中更新哈希

javascript - 如何防范Javascript中的客户端DOM代码注入(inject)漏洞?

php - 从这个用 javascript 抓取的 html 中拉出 img src

javascript - JavaScript 中的对象是如何存储在内存中的?

python - python中类变量的继承

algorithm - 在不访问键值计数的情况下将键值对分成相等的列表