哈希算法是一种典型的分布式的受伤的海燕表算法,哈西系统多用于p2p网络的构建,由Petar Maymounkov和David Mazieres共同创造。
poYBAGKWxoSAF_AGAAVkUR8uInQ583.png
分布式环境下的受伤的海燕表的难点在于以下几点:
分布式环境下每个服务器不可能掌握所有服务器的情况,因此如何保证你的请求能在没有中央节点定位的情况下找到对应的服务器是一大难点。同样由于分布式环境的服务器的掌握信息有限,那么服务器的加入和退出如何能够被集群知晓也是一大难点。
import random
def gcd(a,b):
if a<>
a,b=b,a
while b!=0:
temp=a%b
a=b
b=temp
return a
def getpq(n,e,d):
p=1
q=1
while p==1 and q==1:
k=d*e-1
g=random.randint(0,n)
while p==1 and q==1 and k%2==0:
k/=2
y=pow(g,k,n)
if y!=1 and gcd(y-1,n)>1:
p=gcd(y-1,n)
q=n/p
return p,q
n=0x71ee0f4883690893ab503e97e25e6308d4c1e0a050cbea7b9c040f7a5b5b484afcecc8a9b3cc6bf089a1e83281562df217caab7220e3dfc14399139ce437af2f131f9345675e4d848cfab5827818eeab7834374be4a0513f81f3df125a932c2bb4c24c834d798bcc80f9c4a8770b01f8e54620b72a4f0491edd391e635d48e71
e=0x10001
d=0x455e1c421b78f536ec24e4a797b5be78df09d8d9e3b7f4e2244138a7583e810adf6ad056bb59a91300c9ead5ed77ea6bafdebf7ab2d9ec200127901083c7ffca45e83f2c934358366a2b6207b96a0eae6df0476060c063c281512834a42350a3b56bc09f5cec1a6975257d7f12a58f6389060e49b41f05e88ea2b30b395f6391
p,q=getpq(n,e,d)
print("p=",p)
print("q=",q)
print(p*q==n)
哈希算法在区块链中有着广泛的使用,交易信息的存储、工作量证明算法、密钥对的产生等过程中都有哈希算法的存在。
哈希(Hash)也被翻译为散列。任意长度的输入经过散列函数,都能够输出为固定长度的值,该输出就是散列值。SHA(secureHashalgorithm)也被称为安全散列算法,直译为哈希算法,由美国国家安全局所设计,由美国国家标准与技术研究院发布。SHA家族现有五个算法,分别是SHA-1.SHA-224、SHA-256、SHA-384和SHA-512,后四者并称为SHA-2
如果将区块链看作一个公共账本,节点中每个人都备份一份账本数据,任何人都可以对账本上的内容进行写入和读取。如果有用户对内容进行了恶意算改,依照少数服从多数的原则,将差异数据与全网数据进行比较后,就能够发现存在的异常。但是,账本上的内容随着时间的累积,数据量必然会越来越庞大,如果将交易数据进行原始存储,利用大量数据直接进行比对,工程量对于一个货币系统而言是十分不现实的。对此,在交易信息的存储中,区块链利用了哈希函数能够方便实现数据压缩的特性:一段数据在经过哈希函数的运算后,就能够得到相较而言很短的摘要数据。