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