当前位置: 首页 > 面试题库 >

计算数据结构的md5哈希

邓子濯
2023-03-14
问题内容

我想计算的不是字符串,而是整个数据结构的md5哈希。我了解执行此操作的方法的机制(调度值的类型,规范化字典键顺序和其他随机性,递归为子值等)。但这似乎是一种通常有用的操作,所以令我惊讶的是我需要自己动手操作。

Python中有一些更简单的方法来实现这一目标吗?

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

>>> 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

问题答案:

bencode对字典进行排序,因此:

import hashlib
import bencode
data = ['only', 'lists', [1,2,3], 
'dictionaries', {'a':0,'b':1}, 'numbers', 47, 'strings']
data_md5 = hashlib.md5(bencode.bencode(data)).hexdigest()
print data_md5

印刷品:

af1b88ca9fd8a3e828b40ed1b9a2cb20


 类似资料:
  • 我正在寻找解决方案如何计算数据结构的哈希。让我们假设我们有这样一个结构: 我还有函数

  • 哈希表(Hash Table,也叫散列表),是根据关键码值 (Key-Value) 而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。哈希表的实现主要需要解决两个问题,哈希函数和冲突解决。 哈希函数 哈希函数也叫散列函数,它对不同的输出值得到一个固定长度的消息摘要。理想的哈希函数对于不同的输入应该产生不同的结构,同时散列结果应当具有同一性(输出值尽

  • 哈希表也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术核心就是在内存中维护着一张巨大的哈希表。 学过Java对这个应该很熟悉,Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是 HashMap 、 Hashtable 、 LinkedHashMap 和 TreeMap ,类继承关系如下图所示: HashMap是Java程序员

  • 本文向大家介绍数据结构中的Robin-Hood哈希,包括了数据结构中的Robin-Hood哈希的使用技巧和注意事项,需要的朋友参考一下 在本节中,我们将了解什么是Robin-Hood哈希方案。这种散列是开放寻址的技术之一。这试图通过使用更公平的冲突解决策略来均衡元素的搜索时间。在尝试插入时,如果要在位置xi处插入元素x,并且已经在y j = x i处放置了元素y ,则两个元素中的较小者必须继续前进

  • 问题内容: 我正在运行一些用C语言编写的代码,该代码从其他人编写的哈希库(md5.c和md5.h)中调用md5哈希功能。我一直看到的奇怪行为是: 散列工作完美=我对一个字符串进行了散列,它得出的确切散列证明了我已将其与其他多个来源一起使用。 当在我的OSX机器上编译和运行时,散列功能可以完美地工作,并且所计算的散列完全符合应有的方式。 相同的代码,没有更改在基于Linux的服务器上上载和编译,并且

  • 好吧,这里都是我的问题。我正在尝试用MD5哈希加密字符串。下面是我试图哈希的字符串: 以下是预期输出: 下面是我在Android应用程序中得到的信息: 下面是我正在使用的代码: 在Android上运行这段代码时,我得到了上述意想不到的结果,但当我运行这段代码时,就像一个Java程序传递相同的字符串一样,我得到了预期的输出... 究竟是怎么回事?几天来,我一直被这件事难住,在网上搜寻线索。我已经尝试