我想知道您是否可以对字典进行哈希处理?目前正在玩区块链!这是我想哈希的代码:
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
答案 0 :(得分:3)
字典是python中不可散列的数据类型。因此,您不能对字典对象进行哈希处理。但是,如果您需要一些校验和,则可以序列化字典,然后计算其哈希值(只是可以解决问题的解决方法)。
例如,使用jsonpickle
和hashlib
:
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})))