python - 计算数据结构的 md5 哈希

标签 python data-structures md5

我想计算一个 md5 散列,而不是一个字符串,而是整个数据结构。我了解一种方法的机制(发送值的类型、规范化字典键顺序和其他随机性、递归到子值等)。但它似乎是一种通常有用的操作,所以我很惊讶我需要自己滚动这个。

在 Python 中有没有更简单的方法来实现这一点?

更新:建议使用 pickle,这是一个好主意,但 pickle 不会规范化字典键顺序:

>>> import cPickle as pickle
>>> import hashlib, random 
>>> for i in range(10):
...  k = [i*i for i in range(1000)]
...  random.shuffle(k)
...  d = dict.fromkeys(k, 1)
...  p = pickle.dumps(d)
...  print hashlib.md5(p).hexdigest()
...
51b5855799f6d574c722ef9e50c2622b
43d6b52b885f4ecb4b4be7ecdcfbb04e
e7be0e6d923fe1b30c6fbd5dcd3c20b9
aebb2298be19908e523e86a3f3712207
7db3fe10dcdb70652f845b02b6557061
43945441efe82483ba65fda471d79254
8e4196468769333d170b6bb179b4aee0
951446fa44dba9a1a26e7df9083dcadf
06b09465917d3881707a4909f67451ae
386e3f08a3c1156edd1bd0f3862df481

最佳答案

json.dumps()可以按键排序字典。所以你不需要其他依赖:

import hashlib
import json

data = ['only', 'lists', [1,2,3], 'dictionaries', {'a':0,'b':1}, 'numbers', 47, 'strings']
data_md5 = hashlib.md5(json.dumps(data, sort_keys=True).encode('utf-8')).hexdigest()

print(data_md5)

打印:

87e83d90fc0d03f2c05631e2cd68ea02

关于python - 计算数据结构的 md5 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5417949/

相关文章:

python 缩短嵌入的 try-except block

data-structures - m-way树的实际使用

android - 如何使用 Eclipse 生成我的 MD5 和 SHA1 指纹用于调试 keystore (Android)

android - 使用新 keystore 生成 MD5 指纹时出现问题

c++ - 为什么我的 MD5 值打印有额外的 "f"个字符?

python - 使用 Python 3 打印时出现语法错误

python - 在Python中设置全局JsonEncoder

Python Subversion 绑定(bind)哪个与 `pip` 很好地打包?

data-structures - SYSTEM_HANDLE_INFORMATION 结构

无法使结构在 C 中工作(使用 GCC)