簡體   English   中英

MD5哈希的Python + JSON序列化-如何保證兩個等效的對象將序列化為完全相同的字符串?

[英]Python + JSON serialization for MD5 hash - how can I guarantee that two equivalent objects will serialize to exactly the same string?

我需要對字典或列表的內容進行md5哈希處理,我想確保兩個等效的結構將為我提供相同的哈希結果。

到目前為止,我的方法是仔細定義結構的順序,並對它們包含的各種列表和字典進行排序,然后再通過json.dumps()運行它們。

但是,隨着我的結構變得越來越復雜,這變得很費力且容易出錯,無論如何我都不確定它是否在100%的時間或98%的時間工作。

只是好奇是否有人對此有快速解決方案? 我可以在json模塊中設置一個選項來對對象進行完全排序嗎? 還是我可以用來對兩種結構中的信息進行完整比較並返回保證唯一的哈希值的其他技巧?

當我序列化對象時,我只需要字符串(然后是md5)就可以一樣了-我不關心此用例的反序列化。

默認情況下,JSON輸出是不確定的,這僅僅是因為__hash__的結果被鹽化為str (典型JSON對象的鍵值)以防止DoS向量(請參閱文檔中的注釋)。 因此,您需要將sort_keys設置為True來調用json.dumps

>>> import json
>>> d = {'this': 'This word', 'that': 'That other word', 'other': 'foo'}
>>> json.dumps(d)
'{"this": "This word", "other": "foo", "that": "That other word"}'
>>> json.dumps(d, sort_keys=True)
'{"other": "foo", "that": "That other word", "this": "This word"}'

對於最終序列化為list (即listtuple ),您將需要確保以預期的方式進行排序,因為根據定義,列表沒有以任何特定的方式進行排序(這些集合中元素的排序將是持久的)在程序已放置/修改的位置)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM