gpt4 book ai didi

MD5 哈希的 Python + JSON 序列化 - 我如何保证两个等效对象将序列化为完全相同的字符串?

转载 作者:行者123 更新时间:2023-11-28 22:42:07 24 4
gpt4 key购买 nike

我需要对 dict 或列表的内容进行 md5 散列,我想确保两个等效结构将给我相同的散列结果。

到目前为止,我的方法是仔细定义结构的顺序,并对它们包含的各种列表和字典进行排序,然后再通过 json.dumps() 运行它们。

然而,随着我的结构变得越来越复杂,这变得费力且容易出错,而且在任何情况下我都不确定它是否在 100% 的时间或仅在 98% 的时间内工作。

只是好奇是否有人对此有快速的解决方案?我可以在 json 模块中设置一个选项来完全排序对象吗?或者我可以使用其他一些技巧来对两个结构中的信息进行完整比较并返回一个保证唯一的散列?

当我序列化对象时,我只需要字符串(然后是 md5)输出相同——我不关心这个用例的反序列化。

最佳答案

默认情况下 JSON 输出是不确定的,因为 __hash__ 的结果为 str(典型 JSON 对象的键值)加盐以防止 DoS 向量(请参阅文档中的注释)。为此,您需要调用 json.dumps sort_keys 设置为 True。

>>> 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)的对象,您需要确保在预期的方式,因为根据定义,列表没有以任何特定方式排序(这些集合中的元素的排序将保留在它们被程序本身放置/修改的位置)。

关于MD5 哈希的 Python + JSON 序列化 - 我如何保证两个等效对象将序列化为完全相同的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31978402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com