xss*_*han 10 javascript python hash md5
我有一个用例,我必须生成md5一个JSON对象的哈希值,并比较服务器和浏览器中的哈希值.
浏览器客户端生成哈希,然后向服务器请求相同资源的哈希[恰好是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
Run Code Online (Sandbox Code Playgroud)
JS:我在浏览器中使用md5进行散列处理
> var hash = require("md5")
> var data = {"candidate":5, "data":1}
> data = JSON.stringify(data)
> md5(data)
> 92e99f0a99ad2a3b5e02f717a2fb83c2
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
Ign*_*ams 17
您假设两种语言都生成看起来相同的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}"
Run Code Online (Sandbox Code Playgroud)
幸运的是,他们可以.
>>> 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}"
Run Code Online (Sandbox Code Playgroud)
而现在哈希也是一样的.
蟒蛇:
>>> hashlib.md5(a.encode("utf-8")).hexdigest()
>>> d77982d217ec5a9bcbad5be9bee93027
Run Code Online (Sandbox Code Playgroud)
JS:
>>> md5(a)
>>> d77982d217ec5a9bcbad5be9bee93027
Run Code Online (Sandbox Code Playgroud)