![網(wǎng)絡(luò)安全導(dǎo)論 實(shí)驗(yàn)14A 百萬(wàn)富翁協(xié)議與區(qū)塊鏈仿真_第1頁(yè)](http://file4.renrendoc.com/view3/M00/34/36/wKhkFmZacMuAGLqhAAFF41vy8Gw559.jpg)
![網(wǎng)絡(luò)安全導(dǎo)論 實(shí)驗(yàn)14A 百萬(wàn)富翁協(xié)議與區(qū)塊鏈仿真_第2頁(yè)](http://file4.renrendoc.com/view3/M00/34/36/wKhkFmZacMuAGLqhAAFF41vy8Gw5592.jpg)
![網(wǎng)絡(luò)安全導(dǎo)論 實(shí)驗(yàn)14A 百萬(wàn)富翁協(xié)議與區(qū)塊鏈仿真_第3頁(yè)](http://file4.renrendoc.com/view3/M00/34/36/wKhkFmZacMuAGLqhAAFF41vy8Gw5593.jpg)
![網(wǎng)絡(luò)安全導(dǎo)論 實(shí)驗(yàn)14A 百萬(wàn)富翁協(xié)議與區(qū)塊鏈仿真_第4頁(yè)](http://file4.renrendoc.com/view3/M00/34/36/wKhkFmZacMuAGLqhAAFF41vy8Gw5594.jpg)
![網(wǎng)絡(luò)安全導(dǎo)論 實(shí)驗(yàn)14A 百萬(wàn)富翁協(xié)議與區(qū)塊鏈仿真_第5頁(yè)](http://file4.renrendoc.com/view3/M00/34/36/wKhkFmZacMuAGLqhAAFF41vy8Gw5595.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)14A百萬(wàn)富翁協(xié)議與區(qū)塊鏈仿真一、實(shí)驗(yàn)?zāi)康木幊虒?shí)現(xiàn)百萬(wàn)富翁協(xié)議,深化對(duì)安全多方計(jì)算的理解。編程實(shí)現(xiàn)Merkle樹(shù),并計(jì)算出Merkle樹(shù)的TreeRoot。深化對(duì)區(qū)塊鏈和智能合約的理解。二、實(shí)驗(yàn)準(zhǔn)備1、通過(guò)抓包,可以進(jìn)行網(wǎng)絡(luò)故障分析、流量監(jiān)控、隱私盜取等操作,相關(guān)的抓包工具有很多,主要有Fiddler、Wireshark、Charles等。2、區(qū)塊鏈中的交易是以Merkle樹(shù)的形式組織在一個(gè)個(gè)區(qū)塊中的,Merkle樹(shù)是通過(guò)遞歸哈希節(jié)點(diǎn)對(duì)來(lái)構(gòu)造的,直到只有一個(gè)哈希。這個(gè)最終地hash稱(chēng)為Merkle根,Merkle樹(shù)可以?xún)H用log2(N)的時(shí)間復(fù)雜度檢查任何一個(gè)交易是否包含在樹(shù)中。三、實(shí)驗(yàn)內(nèi)容1、參考本章百萬(wàn)富翁協(xié)議,把下述python代碼改成java代碼importmathimportrandom#獲取小于等于指定數(shù)的素?cái)?shù)數(shù)組defget_prime_arr(max):prime_array=[]foriinrange(2,max):ifis_prime(i):prime_array.append(i)returnprime_array#判斷是否為素?cái)?shù)defis_prime(num):ifnum==1:raiseException('1既不是素?cái)?shù)也不是合數(shù)')foriinrange(2,math.floor(math.sqrt(num))+1):ifnum%i==0:#print("當(dāng)前數(shù)%s為非素?cái)?shù),其有因子%s"%(str(num),str(i)))returnFalsereturnTrue#找出一個(gè)指定范圍內(nèi)與n互質(zhì)的整數(shù)edeffind_pub_key(n,max_num):whileTrue:#這里是隨機(jī)獲取保證隨機(jī)性e=random.randint(1,max_num)ifgcd(e,n)==1:breakreturne#求兩個(gè)數(shù)的最大公約數(shù)defgcd(a,b):ifb==0:returnaelse:returngcd(b,a%b)#根據(jù)e*dmods=1,找出ddeffind_pri_key(e,s):fordinrange(100000000):#隨機(jī)太難找,就按順序找到d,range里的數(shù)字隨意x=(e*d)%sifx==1:returnd#生成公鑰和私鑰defbuild_key():prime_arr=get_prime_arr(100)p=random.choice(prime_arr)#保證p和q不為同一個(gè)數(shù)whileTrue:q=random.choice(prime_arr)ifp!=q:breakprint("隨機(jī)生成兩個(gè)素?cái)?shù)p和q.p=",p,"q=",q)n=p*qs=(p-1)*(q-1)e=find_pub_key(s,100)print("根據(jù)e和(p-1)*(q-1)互質(zhì)得到:e=",e)d=find_pri_key(e,s)print("根據(jù)e*d模(p-1)*(q-1)等于1得到d=",d)print("公鑰:n=",n,"e=",e)print("私鑰:n=",n,"d=",d)returnn,e,d#加密defrsa_encrypt(content,ned):#密文B=明文A的e次方模n,ned為公鑰#content就是明文A,ned【1】是e,ned【0】是nB=pow(content,ned[1])%ned[0]returnB#解密defrsa_decrypt(encrypt_result,ned):#明文C=密文B的d次方模n,ned為私鑰匙#encrypt_result就是密文,ned【1】是d,ned【0】是nC=pow(encrypt_result,ned[1])%ned[0]returnCif__name__=='__main__':pbvk=build_key()pbk=(pbvk[0],pbvk[1])#公鑰(n,e)pvk=(pbvk[0],pbvk[2])#私鑰(n,d)#生成兩個(gè)億萬(wàn)富翁i=random.randint(1,10)j=random.randint(1,10)print("==============================================")print("Alice有i=%s億,Bob有j=%s億"%(i,j))x=random.randint(50,pbk[0]-1)#assert(x<N)|N=p*qprint("隨機(jī)選取的大整數(shù)x:%s"%x)K=rsa_encrypt(x,pbk)print("大整數(shù)加密后得密文K:%s"%K)c=K-jprint("Alice收到數(shù)字c:%s"%c)c_list=[]forkinrange(1,11):t=rsa_decrypt(c+k,pvk)c_list.append(t)print("對(duì)c+1到c+10進(jìn)行解密:%s"%c_list)#選取合適大小的p,這里根據(jù)感覺(jué)寫(xiě)了100以?xún)?nèi)的隨機(jī)數(shù),生成的序列的值也要求小于100#這個(gè)p是該算法的精華,在實(shí)際中選取p的策略要考慮到安全性和性能的因素d_list=[]p=random.randint(30,x)#assert(p<x)forkinrange(0,10):d_list.append(c_list[k]%p)print("p的值為:%s"%p)print("除以p后的余數(shù)為:%s"%d_list)d_list[i-1]+=1forkinrange(i,10):d_list[k]+=2print("前i-1位數(shù)字不動(dòng),第i位數(shù)字+1,后面數(shù)字+2后:%s"%d_list)print("第j個(gè)數(shù)字為:%s"%d_list[j-1])print("xmodp為:%s"%(x%p))ifd_list[j-1]==x%p:print("i>j,即Alice比Bob有錢(qián)。")ifi-j>=0:print("驗(yàn)證成功")else:print("代碼存在錯(cuò)誤")elifd_list[j-1]==(x%p)+1:print("i=j,即Alice和Bob一樣有錢(qián)。")else:print("i<j,即Bob比Alice有錢(qián)")ifi-j<0:print("驗(yàn)證成功")else:print("代碼存在錯(cuò)誤")2.分析、調(diào)試下面的代碼,體會(huì)區(qū)塊鏈中每一個(gè)區(qū)塊的構(gòu)造方法(1)Merkle樹(shù)的代碼實(shí)現(xiàn)packagetest;importjava.security.MessageDigest;importjava.util.ArrayList;importjava.util.List;publicclassMerkle樹(shù)s{//transactionListList<String>txList;//MerkleRootStringroot;/***constructor*@paramtxListtransactionList交易List*/publicMerkle樹(shù)s(List<String>txList){this.txList=txList;root="";}/***executemerkle_樹(shù)andsetroot.*/publicvoidmerkle_樹(shù)(){List<String>tempTxList=newArrayList<String>();for(inti=0;i<this.txList.size();i++){tempTxList.add(this.txList.get(i));}List<String>newTxList=getNewTxList(tempTxList);while(newTxList.size()!=1){newTxList=getNewTxList(newTxList);}this.root=newTxList.get(0);}/***returnNodeHashList.*@paramtempTxList*@return*/privateList<String>getNewTxList(List<String>tempTxList){List<String>newTxList=newArrayList<String>();intindex=0;while(index<tempTxList.size()){//leftStringleft=tempTxList.get(index);index++;//rightStringright="";if(index!=tempTxList.size()){right=tempTxList.get(index);}//sha2hexvalueStringsha2HexValue=getSHA2HexValue(left+right);newTxList.add(sha2HexValue);index++;}returnnewTxList;}/***Returnhexstring*@paramstr*@return*/publicStringgetSHA2HexValue(Stringstr){byte[]cipher_byte;try{MessageDigestmd=MessageDigest.getInstance("SHA-256");md.update(str.getBytes());cipher_byte=md.digest();StringBuildersb=newStringBuilder(2*cipher_byte.length);for(byteb:cipher_byte){sb.append(String.format("%02x",b&0xff));}returnsb.toString();}catch(Exceptione){e.printStackTrace();}return"";}/***GetRoot*@return*/publicStringgetRoot(){returnthis.root;}}(2)將交易的數(shù)據(jù)abcde放入到List中,進(jìn)行測(cè)試:packagetest;importjava.util.ArrayList;importjava.util.List;publicclassApp{publicstaticvoidmain(String[]args){List<String>tempTxList=newArrayList<String>();tempTxList.add("a");tempTxList.add("b");tempTxList.add("c");tempTxList.add("d");tempTxList.add("e");Merkle樹(shù)smerkle樹(shù)s=newMerkle樹(shù)s(tempTxList);merkle樹(shù)s.merkle_樹(shù)();System.out.println("root:"+merkle樹(shù)s.getRoot());}}四、實(shí)驗(yàn)報(bào)告1、通過(guò)實(shí)驗(yàn)回答下列問(wèn)題(1)給出實(shí)驗(yàn)1的完成代碼。packageyzj;importjava.util.*;publicclasszhenjieyu3{publicstaticList<Integer>get_prime_arr(intmax){List<Integer>primes=newLinkedList<Integer>();List<Integer>numbers=newLinkedList<Integer>();for(inti=2;i<=max;i++){numbers.add(i);}while(!numbers.isEmpty()){intfront=numbers.remove(0);primes.add(front);Iterator<Integer>itr=numbers.iterator();while(itr.hasNext()){intcurrent=itr.next();if(current%front==0){itr.remove();}}}returnprimes;}privatestaticinte;publicstaticintfind_pub_key(intn,intmax_num){while(true){Randomrand=newRandom();inte=rand.nextInt(max_num)+1;if(gcd(e,n)==1){break;}}returne;}publicstaticintgcd(inta,intb){if(b==0){returna;}else{returngcd(b,a%b);}}publicstaticintfind_pri_key(inte,ints){intd=0;for(inti=1;i<=100000000;i++){intx=(e%i)%s;if(x==1)d=i;}returnd;}publicstaticint[]build_key(){List<Integer>prime_arr=get_prime_arr(100);Randomrand=newRandom();intq=0;intp=prime_arr.get(rand.nextInt(prime_arr.size()));while(true){q=prime_arr.get(rand.nextInt(prime_arr.size()));if(p!=q)break;}System.out.println("隨機(jī)生成兩個(gè)素?cái)?shù)p和q.p="+p+"q="+q);intn=p*q;ints=(p-1)*(q-1);inte=find_pub_key(s,100);System.out.println("根據(jù)e和(p-1)*(q-1)互質(zhì)得到:e="+e);intd=find_pub_key(e,s);System.out.println("根據(jù)e*d模(p-1)*(q-1)等于1得到d="+d);System.out.println("公鑰:n="+n+"e="+e);System.out.println("私鑰:n="+n+"d="+d);int[]ned=newint[3];ned[0]=n;ned[1]=e;ned[2]=d;returnned;}publicstaticdoublersa_encrypt(intcontent,int[]ned){doubleB=Math.pow(content,ned[1])%ned[0];returnB;}publicstaticdoublersa_decrypt(doubled,int[]ned){doubleC=Math.pow(d,ned[1])%ned[0];returnC;}privatestaticvoidprintln(Stringstring){//TODOAuto-generatedmethodstub}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubint[]pbvk=build_key();int[]pbk={pbvk[0],pbvk[1]};int[]pvk={pbvk[0],pbvk[2]};Randomr=newRandom();inti=r.nextInt(10)+1;intj=r.nextInt(10)+1;System.out.println("==============================================");System.out.println("Alice有i="+i+"億,Bob有j="+j+"億");intx=r.nextInt(pbk[0]-1)+50;System.out.println("隨機(jī)選取的大整數(shù)x:"+x);doubleK=rsa_encrypt(x,pbk);System.out.println("大整數(shù)加密后得密文K:"+K);doublec=K-j;System.out.println("Alice收到數(shù)字c:"+c);double[]c_list=newdouble[10];for(inti1=1;i1<=10;i1++){doublet=rsa_decrypt(c+i1,pvk);c_list[i1-1]=t;}double[]d_list=newdouble[10];intp=r.nextInt(x)+30;for(inti2=0;i2<10;i2++){d_list[i]=(c_list[i]%p);}System.out.println("p的值為:"+p);System.out.println("除以p后的余數(shù)為:"+d_list);d_list[i-1]+=1;for(inti3=0;i3<10;i3++){d_list[i3]+=2;}System.out.println("前i-1位數(shù)字不動(dòng),第i位數(shù)字+1,后面數(shù)字+2后:"+d_list);System.out.println("第j個(gè)數(shù)字為:"+d_list[j-1]);System.out.println("xmodp為:"+(x%p));if(d_list[j-1]==x%p){System.out.println("i>j,即Alice比Bob有錢(qián)。");if((i-j)>=0){System.out.println("驗(yàn)證成功");}else{System.out.println("代碼存在錯(cuò)誤");}}elseif(d_list[j-1]==(x%p)+1){System.out.println("i=j,即Alice和Bob一樣有錢(qián)。");}else{System.out.println("i<j,即Bob比Alice有錢(qián)");if((i-j)<0){System.out.println("驗(yàn)證成功");}else{System.out.println("代碼存在錯(cuò)誤");}}}}(2)貼圖給出實(shí)驗(yàn)2的測(cè)試結(jié)果。2、問(wèn)答題(1)對(duì)實(shí)驗(yàn)2,如果再增加一個(gè)鏈表,把每個(gè)區(qū)塊鏈起來(lái),應(yīng)該怎么做?在Golang中,可以通過(guò)一個(gè)array和map來(lái)實(shí)現(xiàn)這個(gè)結(jié)構(gòu):array存儲(chǔ)有序的哈希(Golang中array是有序的),map存儲(chǔ)
hask->block
對(duì)(Golang中,map是無(wú)序的)。但是在基本的原型階段,我們只用到了array,因?yàn)楝F(xiàn)在還不需要通過(guò)哈希來(lái)獲取塊。為了加入一個(gè)新的塊,我們必須要有一個(gè)已有的塊,但是,初始狀態(tài)下,我們的鏈?zhǔn)强盏?,一個(gè)塊都沒(méi)有!所以,在任何一個(gè)區(qū)塊鏈中,都必須至少有一個(gè)塊。這個(gè)塊,也就是鏈中的第一個(gè)塊,通常叫做創(chuàng)世塊(genesisblock).讓我們實(shí)現(xiàn)一個(gè)方法來(lái)創(chuàng)建創(chuàng)世塊packagemainimport( "awesomeProject/src/core" "fmt")funcmain(){ bc:=core.NewBlockchain() bc.AddBlock("Send1BTCtoIvan") bc.AddBlock("Send2moreBTCtoIvan") for_,block:=rangebc.Blocks{ fmt.Printf("Prev.hash:%x\n",block.PrevBlockHash) fmt.Printf("Data:%s\n",block.Data) fmt.Printf("Hash:%x\n",block.Hash) fmt.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025車(chē)輛抵債合同書(shū)
- 2025煉化工程建設(shè)總承包合同
- 2025油漆工程承包合同
- 2024-2025學(xué)年新教材高中語(yǔ)文 第七單元 16.2 登泰山記說(shuō)課稿(1)部編版必修上冊(cè)
- 2024-2025學(xué)年高中地理 第1章 旅游和旅游資源 第2節(jié) 旅游資源的類(lèi)型說(shuō)課稿 中圖版選修3
- 二手房交易時(shí)合同范例
- 飲料公司組建方案
- 《 負(fù)數(shù)》(說(shuō)課稿)-2023-2024學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)人教版
- 石材礦山起料方案
- 鑄造企業(yè)整治方案制定
- 湖南省懷化市2024-2025學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題(含答案)
- “5E”教學(xué)模式下高中數(shù)學(xué)教學(xué)實(shí)踐研究
- 急救藥品知識(shí)培訓(xùn)內(nèi)容
- 人教版初中英語(yǔ)單詞大全七八九年級(jí)(帶音標(biāo)) mp3聽(tīng)力音頻下載
- 四川省成都市成華區(qū)2024年中考語(yǔ)文二模試卷附參考答案
- 《西蘭花全程質(zhì)量安全控制技術(shù)規(guī)范》
- 寒假日常生活勞動(dòng)清單及評(píng)價(jià)表
- 2024-2030年中國(guó)豆腐市場(chǎng)發(fā)展趨勢(shì)展望與投資策略分析報(bào)告
- 營(yíng)銷(xiāo)策劃 -嘉華鮮花餅「正宗」戰(zhàn)略重塑
- 胸腰椎骨折中醫(yī)護(hù)理
- 解剖臺(tái)市場(chǎng)發(fā)展預(yù)測(cè)和趨勢(shì)分析
評(píng)論
0/150
提交評(píng)論