电子商务安全技术RSA算法java实验报告_第1页
电子商务安全技术RSA算法java实验报告_第2页
电子商务安全技术RSA算法java实验报告_第3页
电子商务安全技术RSA算法java实验报告_第4页
电子商务安全技术RSA算法java实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大连海事大学本科生实验报告《电子商务安全技术》实验报告院(系):交通运输管理学院专业班级:电子商务2011级1班课程名称:电子商务安全技术姓名:周慧敏学号:2220113494指导教师:张偲完成日期:2013年11

实验一:RSA算法实验名称:编程实现RSA算法实验目的RSA算法是理论上最为成熟的公开密钥体制,目前在电子商务安全技术领域得到了广泛应用。1.理解RSA算法原理及其应用。2.掌握RSA算法的程序实现过程。3.学会使用RSA算法对数据进行加密和解密实验要求编写程序,完成下列功能,运行程序并记录运行结果。(A)RSA算法的7个步骤:(1).取两个随机素数p和q(p和q保密)(2).计算模n=p*q(n公开)(3).计算欧拉函数j(n)=(p-1)*(q-1)(j(n)保密),丢弃p和q(4).随机选取整数e,满足gcd(e,j(n))=1(e和n为公钥)(5).计算d满足d*e≡1modj(n)(d和n为私钥)(6).加密:将明文分组,每组长度x<n,计算y=xemodn,产生密文y(7).解密:计算x=ydmodn,恢复出明文x(B)附:Rabin-Miller素数检验算法(1)选择一个小于p随机数a(2)设j=0且z=ammodp(3)如果z=1或z=p-1,那么p通过测试,可能是素数(4)如果j>0且z=1,那么p不是素数(5)设j=j+1。如果j<b且z≠p-1,设z=z2modp,然后回到第(4)步。如果z=p-1,那么p通过测试,可能是素数(6)如果j=b且z≠p-1,那么p不是素数2.源程序有良好人机界面,书写实验报告,于11月22日提交。实验内容与步骤1.

实现公钥密码算法RSA算法流程开始开始随机生成两个素数randomprimep、randomprimeq计算模keyn=randomprimep*randomprimeq计算欧拉函数eulern(eulern保密),丢弃randomprimep和randomprimeq随机生成公钥publickeye=10+rand.nextInt(200);计算私钥privatekeyd=(k*eulern+1)/publickeye;加密:passwordtxts=passwordtxts+fastPowerMultiplication((int)eachchar[i],publickeye,keyn)+getRandomString();解密:understandtxts=understandtxts+(char)fastPowerMultiplication(intchar,privatekeyd,keyn);结束2.实验步骤(主要代码)(1)随机产生素数randomprimep、randomprimeq并判断randomprimep、randomprimeq是否为素数:intrandomprimep=0;//素数p初始赋值为零intrandomprimeq=0;//素数q初始赋值为零Randomrand=newRandom();randomprimep=10+rand.nextInt(200);//随机产生素数pwhile(ifPrime(randomprimep))//判断p是否为素数{randomprimep=10+rand.nextInt(200);}randomprimeq=10+rand.nextInt(200);//随机产生素数qwhile(ifPrime(randomprimeq))//判断q是否为素数{randomprimeq=10+rand.nextInt(200);}(2)计算模keyn(keyn公开):keyn=randomprimep*randomprimeq;(3)计算欧拉函数eulern(eulern保密),丢弃randomprimep和randomprimeq:eulern=(randomprimep-1)*(randomprimeq-1);randomprimep=randomprimeq=0;//销毁两个随机素数(4)生成公钥:publickeye=10+rand.nextInt(200);//随机产生公钥while(relativePrime(publickeye,eulern))//判断随机公钥与公私钥相同部分的欧拉数是否为相对素数{publickeye=10+rand.nextInt(200);}(5)用简捷方法求私钥:booleanmark=true;//用简捷方法求私钥,从模逆运算原始定义出发intk=0;while(mark){k++;if((k*eulern+1)%publickeye==0)mark=false;}privatekeyd=(k*eulern+1)/publickeye;//计算私钥(6)加密:RandomAccessFilerafr=newRandomAccessFile(source,"r");//定义源文件RandomAccessFilerafw=newRandomAccessFile(destination,"rw");//定义目标文件Stringunderstandtxts="";//明文初始赋值Stringpasswordtxts="";//密文初始赋值understandtxts=rafr.readLine();//从源文件中读取数据赋值给明文变量passwordtxts=passwordtxts+fastPowerMultiplication((int)eachchar[i],publickeye,keyn)+getRandomString();//用公钥将明文加密后并赋值给密文变量rafw.writeBytes(passwordtxts);//将密文写入目标文件中rafr.close();//关闭源文件rafw.close();//关闭目标文件(7)解密:RandomAccessFilerafr=newRandomAccessFile(source,"r");//定义源文件RandomAccessFilerafw=newRandomAccessFile(destination,"rw");//定义目标文件Stringunderstandtxts="";//明文初始赋值Stringpasswordtxts="";//密文初始赋值passwordtxts=rafr.readLine();//从源文件中读取加密后的数据并赋值给密文变量understandtxts=understandtxts+(char)fastPowerMultiplication(intchar,privatekeyd,keyn);//用私钥将密文解密后并赋给明文变量rafw.writeBytes(understandtxts);//将解密后的明文写入目标文件中rafr.close();//关闭源文件rafw.close();//关闭目标文件3、主要的函数(1)判断一个整型数据是否为素数:publicbooleanifPrime(intnumber)//number为素数,mark返回false;否则,返回true{booleanmark=false;//mark初始赋值为falsefor(inti=2;i<number/2;i++){if(number%i==0)//整型数据number能被除1和它本身之外的数i整除{mark=true;//mark赋值为truebreak;//结束if循环体}}returnmark;//返回mark值}(2)判断两个整型数据是否互为素数:publicbooleanrelativePrime(inte,intn)//number为素数,mark返回false;否则,返回true{booleanmark=false;//mark初始赋值为falsefor(inti=2;i<=n;i++){if(n%i==0)//整型数据n能被除1和它本身之外的数i整除if(e%i==0)//整型数据e能被除1和它本身之外的数i整除{mark=true;//mark赋值为truebreak;//结束if循环体}}returnmark;//返回mark值}(3)求一个整型数据的欧拉数:publicintgetPrivateKeyexp(intnumber){inteulernumber=0;//eulernumber初始化for(inti=2;i<number;i++){if(relativePrime(i,number)==false)//判断两个整型数据是否互为素数{System.out.println("相互素数:"+i+","+number);eulernumber++;//互为素数,则欧拉数加1}}System.out.println(eulernumber);//输出欧拉数returneulernumber+1;//返回欧拉数+1}(4)模n的大数幂乘快速运算(a底数、b指数、n模数、c大数幂乘结果)publicintfastPowerMultiplication(inta,intb,intn){intc=1;while(b!=0)//指数b不为零{while(b%2==0)//指数b是偶数{b=b/2;a=(a*a)%n;}b=b-1;//指数b不是偶数,则减1c=(c*a)%n;}returnc;}(5)主函数:publicstaticvoidmain(String[]args){Rsarsa=newRsa();rsa.dataEncryption("b.txt","c.txt");//调用加密函数,b.txt存放初始明文,c.txt存放加密后的密文rsa.dataDeciphering("c.txt","d.txt");//调用解密函数,d.txt存放解密后的明文}}4、实验结果五、实验总结通过本次实验,了解并明白了RSA算法以及与之有关的数学公式,同时也掌握了如何编写随机生成素数以及计算私钥的程序的核心概念,并且学会了在编程里怎么运用读写文件的操作。在编程的过程中,遇到不明白的地方都会向百度或者Google请教,很多问题都逐个地解决了。不足的地方就是缺乏没能实现图形界面,在今后的实验当中尽力弥补。源代码:

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("相互素数:"+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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论