電子商務(wù)安全技術(shù)RSA算法java實(shí)驗(yàn)報(bào)告_第1頁
電子商務(wù)安全技術(shù)RSA算法java實(shí)驗(yàn)報(bào)告_第2頁
電子商務(wù)安全技術(shù)RSA算法java實(shí)驗(yàn)報(bào)告_第3頁
電子商務(wù)安全技術(shù)RSA算法java實(shí)驗(yàn)報(bào)告_第4頁
電子商務(wù)安全技術(shù)RSA算法java實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

大連海事大學(xué)本科生實(shí)驗(yàn)報(bào)告《電子商務(wù)安全技術(shù)》實(shí)驗(yàn)報(bào)告院(系):交通運(yùn)輸管理學(xué)院專業(yè)班級(jí):電子商務(wù)2011級(jí)1班課程名稱:電子商務(wù)安全技術(shù)姓名:周慧敏學(xué)號(hào):2220113494指導(dǎo)教師:張偲完成日期:2013年11

實(shí)驗(yàn)一:RSA算法實(shí)驗(yàn)名稱:編程實(shí)現(xiàn)RSA算法實(shí)驗(yàn)?zāi)康腞SA算法是理論上最為成熟的公開密鑰體制,目前在電子商務(wù)安全技術(shù)領(lǐng)域得到了廣泛應(yīng)用。1.理解RSA算法原理及其應(yīng)用。2.掌握RSA算法的程序?qū)崿F(xiàn)過程。3.學(xué)會(huì)使用RSA算法對(duì)數(shù)據(jù)進(jìn)行加密和解密實(shí)驗(yàn)要求編寫程序,完成下列功能,運(yùn)行程序并記錄運(yùn)行結(jié)果。(A)RSA算法的7個(gè)步驟:(1).取兩個(gè)隨機(jī)素?cái)?shù)p和q(p和q保密)(2).計(jì)算模n=p*q(n公開)(3).計(jì)算歐拉函數(shù)j(n)=(p-1)*(q-1)(j(n)保密),丟棄p和q(4).隨機(jī)選取整數(shù)e,滿足gcd(e,j(n))=1(e和n為公鑰)(5).計(jì)算d滿足d*e≡1modj(n)(d和n為私鑰)(6).加密:將明文分組,每組長(zhǎng)度x<n,計(jì)算y=xemodn,產(chǎn)生密文y(7).解密:計(jì)算x=ydmodn,恢復(fù)出明文x(B)附:Rabin-Miller素?cái)?shù)檢驗(yàn)算法(1)選擇一個(gè)小于p隨機(jī)數(shù)a(2)設(shè)j=0且z=ammodp(3)如果z=1或z=p-1,那么p通過測(cè)試,可能是素?cái)?shù)(4)如果j>0且z=1,那么p不是素?cái)?shù)(5)設(shè)j=j+1。如果j<b且z≠p-1,設(shè)z=z2modp,然后回到第(4)步。如果z=p-1,那么p通過測(cè)試,可能是素?cái)?shù)(6)如果j=b且z≠p-1,那么p不是素?cái)?shù)2.源程序有良好人機(jī)界面,書寫實(shí)驗(yàn)報(bào)告,于11月22日提交。實(shí)驗(yàn)內(nèi)容與步驟1.

實(shí)現(xiàn)公鑰密碼算法RSA算法流程開始開始隨機(jī)生成兩個(gè)素?cái)?shù)randomprimep、randomprimeq計(jì)算模keyn=randomprimep*randomprimeq計(jì)算歐拉函數(shù)eulern(eulern保密),丟棄randomprimep和randomprimeq隨機(jī)生成公鑰publickeye=10+rand.nextInt(200);計(jì)算私鑰privatekeyd=(k*eulern+1)/publickeye;加密:passwordtxts=passwordtxts+fastPowerMultiplication((int)eachchar[i],publickeye,keyn)+getRandomString();解密:understandtxts=understandtxts+(char)fastPowerMultiplication(intchar,privatekeyd,keyn);結(jié)束2.實(shí)驗(yàn)步驟(主要代碼)(1)隨機(jī)產(chǎn)生素?cái)?shù)randomprimep、randomprimeq并判斷randomprimep、randomprimeq是否為素?cái)?shù):intrandomprimep=0;//素?cái)?shù)p初始賦值為零intrandomprimeq=0;//素?cái)?shù)q初始賦值為零Randomrand=newRandom();randomprimep=10+rand.nextInt(200);//隨機(jī)產(chǎn)生素?cái)?shù)pwhile(ifPrime(randomprimep))//判斷p是否為素?cái)?shù){randomprimep=10+rand.nextInt(200);}randomprimeq=10+rand.nextInt(200);//隨機(jī)產(chǎn)生素?cái)?shù)qwhile(ifPrime(randomprimeq))//判斷q是否為素?cái)?shù){randomprimeq=10+rand.nextInt(200);}(2)計(jì)算模keyn(keyn公開):keyn=randomprimep*randomprimeq;(3)計(jì)算歐拉函數(shù)eulern(eulern保密),丟棄randomprimep和randomprimeq:eulern=(randomprimep-1)*(randomprimeq-1);randomprimep=randomprimeq=0;//銷毀兩個(gè)隨機(jī)素?cái)?shù)(4)生成公鑰:publickeye=10+rand.nextInt(200);//隨機(jī)產(chǎn)生公鑰while(relativePrime(publickeye,eulern))//判斷隨機(jī)公鑰與公私鑰相同部分的歐拉數(shù)是否為相對(duì)素?cái)?shù){publickeye=10+rand.nextInt(200);}(5)用簡(jiǎn)捷方法求私鑰:booleanmark=true;//用簡(jiǎn)捷方法求私鑰,從模逆運(yùn)算原始定義出發(fā)intk=0;while(mark){k++;if((k*eulern+1)%publickeye==0)mark=false;}privatekeyd=(k*eulern+1)/publickeye;//計(jì)算私鑰(6)加密:RandomAccessFilerafr=newRandomAccessFile(source,"r");//定義源文件RandomAccessFilerafw=newRandomAccessFile(destination,"rw");//定義目標(biāo)文件Stringunderstandtxts="";//明文初始賦值Stringpasswordtxts="";//密文初始賦值understandtxts=rafr.readLine();//從源文件中讀取數(shù)據(jù)賦值給明文變量passwordtxts=passwordtxts+fastPowerMultiplication((int)eachchar[i],publickeye,keyn)+getRandomString();//用公鑰將明文加密后并賦值給密文變量rafw.writeBytes(passwordtxts);//將密文寫入目標(biāo)文件中rafr.close();//關(guān)閉源文件rafw.close();//關(guān)閉目標(biāo)文件(7)解密:RandomAccessFilerafr=newRandomAccessFile(source,"r");//定義源文件RandomAccessFilerafw=newRandomAccessFile(destination,"rw");//定義目標(biāo)文件Stringunderstandtxts="";//明文初始賦值Stringpasswordtxts="";//密文初始賦值passwordtxts=rafr.readLine();//從源文件中讀取加密后的數(shù)據(jù)并賦值給密文變量understandtxts=understandtxts+(char)fastPowerMultiplication(intchar,privatekeyd,keyn);//用私鑰將密文解密后并賦給明文變量rafw.writeBytes(understandtxts);//將解密后的明文寫入目標(biāo)文件中rafr.close();//關(guān)閉源文件rafw.close();//關(guān)閉目標(biāo)文件3、主要的函數(shù)(1)判斷一個(gè)整型數(shù)據(jù)是否為素?cái)?shù):publicbooleanifPrime(intnumber)//number為素?cái)?shù),mark返回false;否則,返回true{booleanmark=false;//mark初始賦值為falsefor(inti=2;i<number/2;i++){if(number%i==0)//整型數(shù)據(jù)number能被除1和它本身之外的數(shù)i整除{mark=true;//mark賦值為truebreak;//結(jié)束if循環(huán)體}}returnmark;//返回mark值}(2)判斷兩個(gè)整型數(shù)據(jù)是否互為素?cái)?shù):publicbooleanrelativePrime(inte,intn)//number為素?cái)?shù),mark返回false;否則,返回true{booleanmark=false;//mark初始賦值為falsefor(inti=2;i<=n;i++){if(n%i==0)//整型數(shù)據(jù)n能被除1和它本身之外的數(shù)i整除if(e%i==0)//整型數(shù)據(jù)e能被除1和它本身之外的數(shù)i整除{mark=true;//mark賦值為truebreak;//結(jié)束if循環(huán)體}}returnmark;//返回mark值}(3)求一個(gè)整型數(shù)據(jù)的歐拉數(shù):publicintgetPrivateKeyexp(intnumber){inteulernumber=0;//eulernumber初始化for(inti=2;i<number;i++){if(relativePrime(i,number)==false)//判斷兩個(gè)整型數(shù)據(jù)是否互為素?cái)?shù){System.out.println("相互素?cái)?shù):"+i+","+number);eulernumber++;//互為素?cái)?shù),則歐拉數(shù)加1}}System.out.println(eulernumber);//輸出歐拉數(shù)returneulernumber+1;//返回歐拉數(shù)+1}(4)模n的大數(shù)冪乘快速運(yùn)算(a底數(shù)、b指數(shù)、n模數(shù)、c大數(shù)冪乘結(jié)果)publicintfastPowerMultiplication(inta,intb,intn){intc=1;while(b!=0)//指數(shù)b不為零{while(b%2==0)//指數(shù)b是偶數(shù){b=b/2;a=(a*a)%n;}b=b-1;//指數(shù)b不是偶數(shù),則減1c=(c*a)%n;}returnc;}(5)主函數(shù):publicstaticvoidmain(String[]args){Rsarsa=newRsa();rsa.dataEncryption("b.txt","c.txt");//調(diào)用加密函數(shù),b.txt存放初始明文,c.txt存放加密后的密文rsa.dataDeciphering("c.txt","d.txt");//調(diào)用解密函數(shù),d.txt存放解密后的明文}}4、實(shí)驗(yàn)結(jié)果五、實(shí)驗(yàn)總結(jié)通過本次實(shí)驗(yàn),了解并明白了RSA算法以及與之有關(guān)的數(shù)學(xué)公式,同時(shí)也掌握了如何編寫隨機(jī)生成素?cái)?shù)以及計(jì)算私鑰的程序的核心概念,并且學(xué)會(huì)了在編程里怎么運(yùn)用讀寫文件的操作。在編程的過程中,遇到不明白的地方都會(huì)向百度或者Google請(qǐng)教,很多問題都逐個(gè)地解決了。不足的地方就是缺乏沒能實(shí)現(xiàn)圖形界面,在今后的實(shí)驗(yàn)當(dāng)中盡力彌補(bǔ)。源代碼:

importjava.io.*;importjava.util.Random;publicclassRsa{privateintkeyn;privateintpublickeye;privateintprivatekeyd;publicRsa(){intrandomprimep=0;intrandomprimeq=0;inteulern=0;Randomrand=newRandom();randomprimep=10+rand.nextInt(200);while(ifPrime(randomprimep)){randomprimep=10+rand.nextInt(200);}randomprimeq=10+rand.nextInt(200);while(ifPrime(randomprimeq)){randomprimeq=10+rand.nextInt(200);}keyn=randomprimep*randomprimeq;eulern=(randomprimep-1)*(randomprimeq-1);randomprimep=randomprimeq=0;publickeye=10+rand.nextInt(200);while(relativePrime(publickeye,eulern)){publickeye=10+rand.nextInt(200);}booleanmark=true;intk=0;while(mark){k++;if((k*eulern+1)%publickeye==0)mark=false;}privatekeyd=(k*eulern+1)/publickeye;System.out.println("公鑰為:("+publickeye+","+keyn+")");System.out.println("私鑰為:("+privatekeyd+","+keyn+")");}publicbooleanifPrime(intnumber){booleanmark=false;for(inti=2;i<number/2;i++){if(number%i==0){mark=true;break;}}returnmark;}publicbooleanrelativePrime(inte,intn){booleanmark=false;for(inti=2;i<=n;i++){if(n%i==0)if(e%i==0){mark=true;break;}}returnmark;}publicintfastPowerMultiplication(inta,intb,intn){intc=1;while(b!=0){while(b%2==0){b=b/2;a=(a*a)%n;}b=b-1;c=(c*a)%n;}returnc;}publicintgetPrivateKeyexp(intnumber){inteulernumber=0;for(inti=2;i<number;i++){if(relativePrime(i,number)==false){System.out.println("相互素?cái)?shù):"+i+","+number);eulernumber++;}}System.out.println(eulernumber);returneulernumber+1;}publicvoiddataEncryption(Stringsource,Stringdestination){try{RandomAccessFilerafr=newRandomAccessFile(source,"r");RandomAccessFilerafw=newRandomAccessFile(destination,"rw");Stringunderstandtxts="";Stringpasswordtxts="";char[]eachchar;intcharint=0;booleanmark=false;try{longfilelength=rafr.length();longpos=0;while(pos!=filelength){understandtxts=rafr.readLine();eachchar=understandtxts.toCharArray();for(inti=0;i<eachchar.length;i++){charint=(int)eachchar[i];if(charint>127||charint<10){System.out.println("加密失??!原文中包含不能加密的字符。");mark=true;break;}}if(mark){break;}pos=rafr.getFilePointer();}rafr.seek(0);pos=0;if(!mark){System.out.println("從文件讀入明文:");while(pos!=filelength){System.out.println(rafr.readLine());pos=rafr.getFilePointer();}rafr.seek(0);pos=0;System.out.println("明文加密后密文:");while(true){understandtxts=rafr.readLine();eachchar=understandtxts.toCharArray();for(inti=0;i<eachchar.length;i++){passwordtxts=passwordtxts+fastPowerMultiplication((int)eachchar[i],publickeye,keyn)+getRandomString();}System.out.println(passwordtxts);rafw.writeBytes(passwordtxts);pos=rafr.getFilePointer();if(pos==filelength){break;}passwordtxts="";rafw.writeChar('');}}}catch(Exceptione){e.printStackTrace(System.out);}finally{rafr.close();rafw.close();}}catch(IOExceptionex){ex.printStackTrace(System.out);}}publicStringgetRandomString(){Randomrand=newRandom();Stringrandstr="";intnumber=1+rand.nextInt(5);intcharint=65+rand.nextInt(26);for(inti=0;i<number;i++){randstr=randstr+(char)charint;charint=65+rand.nextInt(26);}returnrandstr;}publicvoiddataDeciphering(Stringsource,Stringdestination){try{RandomAccessFilerafr=newRandomAccessFile(source,"r");RandomAccessFilerafw=newRandomAccessFile(destination,"rw");Stringunderstandtxts="";Stringpasswordtxts="";char[]eachchar;intintchar=0;booleanmark=false;try{longfilelength=rafr.length();longpos=0;intj=0;System.out.println("密文解密后明文:");while(true){passwordtxts=rafr.readLine();eachchar=passwordtxts.toCharArray();for(inti=0;i<eachchar.length;i++){if(Character.isDigit(eachchar[i])){intchar=10*intchar+Integ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論