蟒蛇3的实现

perkle的Python项目详细描述


perkle:merkle树的简单python 3实现

perkle提供了一个简单的、全python的merkle树实现。

安装

该软件包可以通过pip安装:

pip install perkle

或者克隆这个存储库。

pycryptodome在需求中。确保这不会与(不推荐使用的)包pycrypto的安装冲突。

示例

下面是如何创建从0到9的merkle数树:

fromCrypto.HashimportSHA256fromperkleimportMerkleTreefrombinasciiimporthexlifydata_list=[b'0',b'1',b'2',b'3',b'4',b'5',b'6',b'7',b'8',b'9']sha256=lambdax:SHA256.new(x).digest()mt=MerkleTree(data_list,sha256,random_padding=False,padding_byte=b'0')print(hexlify(mt.root()))#70cc27c03c0444d1dfc63f58e373a2882a7b9f4f7f6ed1a4dfc1a94a5ac5875c

默认情况下,我们向数据添加一个随机填充,使其具有两个叶的幂。可以使用random_padding参数使填充非随机,以使结果一致。

可以在merkle树中插入新数据:

data=b'10'mt.insert(data)print(hexlify(mt.root()))#3e32b51c76de4b124f1fedfbb4d5a30d117274bf04b538ca7f10434e2f8a35b9

和现有数据可以更新:

new_data=b'zero'mt.update(0,new_data)print(hexlify(mt.root()))#d485ca0c92d339d2e8495216cdb420f0e215003fffdb62d09da56d8739c94a11

证据很容易生成:

index,proof_hashes=mt.proof(b'7')

并验证:

print(MerkleTree.verify(b'7',index,proof_hashes,mt.root(),sha256))#True

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java例外。Lang.Stringindexoutofboundsexception索引超出范围(0)   java Spring引导Freemarker从2.2.0升级失败   重构Java反模式名称?包含对象的对象包含。。。等   用java处理JDBC可能出现的死锁的最佳方法   java无法访问主线程上的数据库,因为它可能会在很长一段时间内锁定UI   java如何将固定大小的画布包装在边框窗格中的滚动窗格居中?   java解析xsd文件后得到空结果   在html页面中表示XML文件的java   socketjava对象流   sql Java越界异常数据库   JavaJBoss7.1.1不会在Mavericks上启动   Twincat ADS事件驱动读取在一段时间后停止工作(Java)   java MyBatis使用生成的ID插入所有   Mojave上缺少MacOS Java控制面板   JavaGuice:如果多次注入相同的依赖项,是否注入了该依赖项的相同实例?