在最底(di)部(bu),和(he)哈(ha)(ha)希(xi)(xi)(xi)(xi)詳細(xi)信(xin)息這樣(yang)的(de)(de)(de)(de)(de),小(xiao)編把(ba)數(shu)據(ju)報告表(biao)(biao)(biao)格劃(hua)分為小(xiao)的(de)(de)(de)(de)(de)數(shu)據(ju)報告表(biao)(biao)(biao)格塊,有相表(biao)(biao)(biao)示的(de)(de)(de)(de)(de)地哈(ha)(ha)希(xi)(xi)(xi)(xi)和(he)它表(biao)(biao)(biao)示。但(dan)向上(shang)(shang)走,并不(bu)算之間去運算根(gen)哈(ha)(ha)希(xi)(xi)(xi)(xi),然而把(ba)相距的(de)(de)(de)(de)(de)兩根(gen)哈(ha)(ha)希(xi)(xi)(xi)(xi)一(yi)(yi)并連成一(yi)(yi)片個空(kong)數(shu)組,第二步運算這是(shi)(shi)空(kong)數(shu)組的(de)(de)(de)(de)(de)哈(ha)(ha)希(xi)(xi)(xi)(xi),這樣(yang)的(de)(de)(de)(de)(de)每(mei)兩根(gen)哈(ha)(ha)希(xi)(xi)(xi)(xi)就接婚生子,至(zhi)(zhi)個”子哈(ha)(ha)希(xi)(xi)(xi)(xi)“。倘若最底(di)部(bu)的(de)(de)(de)(de)(de)哈(ha)(ha)希(xi)(xi)(xi)(xi)數(shu)是(shi)(shi)單(dan)數(shu),那到另(ling)外必(bi)定有一(yi)(yi)單(dan)身哈(ha)(ha)希(xi)(xi)(xi)(xi),此(ci)種實際情況就之間對它參與哈(ha)(ha)希(xi)(xi)(xi)(xi)運算,以至(zhi)(zhi)于一(yi)(yi)定會到它的(de)(de)(de)(de)(de)子哈(ha)(ha)希(xi)(xi)(xi)(xi)。于向上(shang)(shang)推,但(dan)依然是(shi)(shi)這樣(yang)的(de)(de)(de)(de)(de)的(de)(de)(de)(de)(de)的(de)(de)(de)(de)(de)方(fang)法,應(ying)該到狀(zhuang)況更加少了(le)的(de)(de)(de)(de)(de)新(xin)3級哈(ha)(ha)希(xi)(xi)(xi)(xi),終(zhong)究必(bi)定形連成一(yi)(yi)片棵下(xia)跌情況的(de)(de)(de)(de)(de)樹,至(zhi)(zhi)樹根(gen)的(de)(de)(de)(de)(de)這是(shi)(shi)位址,這新(xin)一(yi)(yi)批(pi)就完(wan)剩一(yi)(yi)根(gen)哈(ha)(ha)希(xi)(xi)(xi)(xi)了(le),小(xiao)編把(ba)它叫 Merkle Root。
Merkle Tree的(de)小(xiao)葉接(jie)點的(de)value是數(shu)劇資料(liao)匯合的(de)單(dan)無數(shu)劇資料(liao)一些單(dan)無數(shu)劇資料(liao)HASH。
非樹(shu)嫩葉域的(de)(de)value是只能根據它(ta)接下每個(ge)的(de)(de)樹(shu)嫩葉域值,之后(hou)決定Hash運(yun)算(suan)方式運(yun)算(suan)而給出的(de)(de)。
我們對OSNMA而(er)言(yan),選用(yong)打了(le)個個16個樹(shu)(shu)(shu)葉點(dian)(dian)位(wei)的(de)(de)(de)(de)層次性默克爾樹(shu)(shu)(shu),16個樹(shu)(shu)(shu)葉點(dian)(dian)位(wei)不同相(xiang)匹配(pei)的(de)(de)(de)(de)m0~m15,對mi做好連續哈希,則擁(yong)有X(0,i),故此(ci)樹(shu)(shu)(shu)從底往前,第0層的(de)(de)(de)(de)點(dian)(dian)位(wei)總(zong)數(shu)為(wei)(wei)16,然后(hou)層的(de)(de)(de)(de)點(dian)(dian)位(wei)數(shu)為(wei)(wei)8,第2層的(de)(de)(de)(de)點(dian)(dian)位(wei)數(shu)為(wei)(wei)4,然后(hou)層的(de)(de)(de)(de)點(dian)(dian)位(wei)數(shu)為(wei)(wei)2,然后(hou)層點(dian)(dian)位(wei)數(shu)為(wei)(wei)1,也(ye)(ye)是(shi)(shi)(shi)根(gen)點(dian)(dian)位(wei)。往前1層,點(dian)(dian)位(wei)數(shu)少半是(shi)(shi)(shi)為(wei)(wei)了(le)選用(yong)的(de)(de)(de)(de)就(jiu)是(shi)(shi)(shi)一個壓(ya)根(gen)二叉樹(shu)(shu)(shu)。在其中(zhong)mi的(de)(de)(de)(de)值是(shi)(shi)(shi)由私鑰(yao)類型的(de)(de)(de)(de)+私鑰(yao)代號+私鑰(yao)形(xing)成,這(zhe)也(ye)(ye)就(jiu)相(xiang)關在了(le)osnma電(dian)本文中(zhong)采用(yong)的(de)(de)(de)(de)加密文件神經網絡(luo)算(suan)法的(de)(de)(de)(de)查證。
OSNMA中再(zai)生利用默克爾樹交接看到DSM-PKR華(hua)圖共秘鑰的認證,是經過(guo)hash不要逆和只需要播(bo)發(fa)六個進(jin)程配合通用秘鑰自個轉成(cheng)一些進(jin)程,組(zu)成(cheng)7個進(jin)程就(jiu)能完整對(dui)根進(jin)程的校正。現實情(qing)況舉一些事(shi)件就(jiu)很加容易懂得了。
ICD中(zhong),MID是(shi)中(zhong)用提(ti)示之前播發的(de)DSM-PKR中(zhong)的(de)服務(wu)性秘鑰(yao)的(de)表示相互關系(xi),舉列(lie)MID=0的(de)時期,mi=公(gong)(gong)開(kai)密鑰(yao)形式+0+公(gong)(gong)開(kai)密鑰(yao),另一個再播剛(gang)發X(0,1),X(1,1),X(2,1),X(3,1)。驗證工(gong)藝流(liu)程是(shi)這樣子(zi)的(de),
獨一(yi)部mi去sha-256能(neng)夠 X(0,0)
第2步將X(0,0)+X(0,1),接下(xia)來對(dui)之和的數劇開始(shi)sha-256控(kong)制,所得的沒想(xiang)到標記符號為X(1,0)
第(di)三點步將X(1,0)+X(1,1),后(hou)來對(dui)之(zhi)和的資料做出sha-256控制,增值稅的結(jie)果圖標為X(2,0)
4.步將X(2,0)+X(2,1),然(ran)后呢對求和(he)的數據庫去(qu)sha-256操作方法(fa),所(suo)獲資金結果圖標(biao)為X(3,0)
第三步步將X(3,0)+X(3,1),接下來對累加的數據(ju)分析來sha-256方法,所有的結(jie)果符號為X(4,0)
X(4,0)就(jiu)是(shi)指根連接點(dian)(dian),與從服(fu)務管理免費下載的(de)根連接點(dian)(dian)對其進行較(jiao)為必須指導檢定可(ke)不可(ke)以可(ke)以利用。
表(biao)示(shi)任何的(de)(de)MID,只(zhi)需(xu)要將步(bu)湊中的(de)(de)下表(biao)依照規定(ding)表(biao)示(shi)工作(zuo)表(biao)格中寫出的(de)(de)進行轉換,方法就是致(zhi)的(de)(de)。
python實例
'''實計(ji)運行的(de)(de)時(shi),不想(xiang)要顧慮那(nei)麼復(fu)雜(za)的(de)(de),直觀做一兩個優(you)化的(de)(de)merkleTree,就可(ke)使用(yong)OSNMA的(de)(de)運作。鑒于OSNMA的(de)(de)merkleTree的(de)(de)層高(gao)和時(shi)間數(shu)是放置(zhi)的(de)(de)
'''
class OSNMAMerkleTree:
def __init__(self,hashFun):
self.hashFun = hashFun
self.allNodes=dict()#所有端點的(de)信息動用三個(ge)數字(zi)(zi)(zi)6數字(zi)(zi)(zi)代表(biao),首先(xian)個(ge)數字(zi)(zi)(zi)代表(biao)層,2個(ge)數字(zi)(zi)(zi)代表(biao)這1層的(de)第(di)這幾個(ge)
self.leafm0_15=[]
self.InterNode=[[(0,1),(1,1),(2,1),(3,1)],#m0
[(0,0),(1,1),(2,1),(3,1)],#m1
[(0,3),(1,0),(2,1),(3,1)],#m2
[(0,2),(1,0),(2,1),(3,1)], [(0,5),(1,3),(2,0),(3,1)], [(0,4),(1,3),(2,0),(3,1)], [(0,7),(1,2),(2,0),(3,1)], [(0,6),(1,2),(2,0),(3,1)], [(0,9),(1,5),(2,3),(3,0)], [(0,8),(1,5),(2,3),(3,0)],[(0,11),(1,4),(2,3),(3,0)],#m10
[(0,10),(1,4),(2,3),(3,0)],#m11
[(0,13),(1,7),(2,2),(3,0)], [(0,12),(1,7),(2,2),(3,0)], [(0,15),(1,6),(2,2),(3,0)],[(0,14),(1,6),(2,2),(3,0)],#m15
] #只需(xu)要的(de)連接點(dian)表(biao)
def AddLayer(self,floorindex,nodeSize):
for i in range(nodeSize):
leftNodeValue=self.allNodes[(floorindex,index)] #完成左方子進程數據(ju)統計
rightNodeValue=self.allNodes[(floorindex,index+1)]#獲得(de)下方子結點(dian)參數
blocktmp=leftNodeValue+rightNodeValueself.allNodes.update({(floorindex+1,indexkey):self.hashFun(blocktmp).digest()})#求算父點位的統計(ji)數據
def GeneratorMerkleTree(self,data_blocks):
if not data_blocks:
return None
self.leafm0_15 = data_blocks
self.allNodes.clear()
floorindex=0 index =0for block in data_blocks:
self.allNodes.update({(floorindex,index):self.hashFun(block).digest()})
index+=1
self.AddLayer(0,8)
self.AddLayer(1,4)
self.AddLayer(2,2)
self.AddLayer(3,1)
#獲取分別的(de)頂點
def GetNodeValue(self,floor,index):
return self.allNodes[(floor,index)]
#領取mi對應著(zhu)的(de)幾個(ge)頂點
def GetMiNodes(self,miIndex=0):
Nodes=[]for i in range(4):
tmp=self.InterNode[miIndex][i]
nodedata=self.GetNodeValue(tmp[0],tmp[1])
Nodes.append(nodedata)return Nodes
def verifyRoot(self,mid,ITNS,leaf):
node = self.hashFun(leaf).digest()
for it_node in ITNS:
if mid % 2 == 0:
node = self.hashFun(node + it_node).digest()
else:
node = self.hashFun(it_node + node).digest()
mid = mid // 2
return node==self.allNodes[(4,0)]
#index為MID,mi為小編子域
def verifycalRoot(self,MID,mi):
x0i=self.hashFun(mi).digest()
for item in self.InterNode[MID]:
ifMID%2==0:
x0i=x0i+self.allNodes[item]
else:
x0i=self.allNodes[item]+x0i
MID =MID // 2
x0i=self.hashFun(x0i).digest()
return x0i
def showallnodes(self):
for i, v in self.allNodes.items():
print(i,v)
def getAllNodes(self):
return self.allNodes
def getleafi(self,i):
return self.leafm0_15[i]