如何对字典进行哈希处理?

时间:2018-10-07 22:23:27

标签: python

我想知道您是否可以对字典进行哈希处理?目前正在玩区块链!这是我想哈希的代码:

def add_transactions():

    transaction = {

      "previous_block_hash": previous_block_hash() ,

      "index": increase_index(),

      "item": item(),

      "timestamp": datetime.datetime.now(),

      "sender": get_sender(),

      "receiver": get_receiver()

    }

想知道应用hashlib以获得256值的最佳方法 a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2

2 个答案:

答案 0 :(得分:3)

字典是python中不可散列的数据类型。因此,您不能对字典对象进行哈希处理。但是,如果您需要一些校验和,则可以序列化字典,然后计算其哈希值(只是可以解决问题的解决方法)。

例如,使用jsonpicklehashlib

import jsonpickle
import hashlib

dct = {"key": "value"}

serialized_dct = jsonpickle.encode(dct)

check_sum = hashlib.sha256(serialized_dct.encode('utf-8')).digest()

print(check_sum)

UPD:

Glich的代码示例不够精确,需要通过以下方式进行改进:

import json
import hashlib

s = json.dumps({'test dict!': 42}).encode('utf-8')

print(hashlib.md5(s).digest()) 

答案 1 :(得分:1)

hashlib函数需要一个缓冲区(它们处理原始数据,而不是抽象对象,其数据布局是Python解释器的实现细节)。这意味着您必须首先以某种方式序列化数据。

例如,您可以先使用json模块将字典转换为JSON。

import json
import hashlib

print(haslib.md5(json.dumps({'test dict!':42})))