桂电多功能数字签名_第1页
桂电多功能数字签名_第2页
桂电多功能数字签名_第3页
桂电多功能数字签名_第4页
桂电多功能数字签名_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

课程设计(论文)说明书题目:RSA多功能数字签名学院:计算机科学与工程学院专业:信息平安姓名:学号:指导教师:2014年1月12日摘要随着Internet的开展,电子商务已经逐渐成为人们进行商务活动的新模式,越来越多的人通过Internet进行商务活动。电子商务的开展前景十分诱人,而其平安问题也变得越来越突出,如何建立一个平安、便捷的电子商务应用环境,对信息提供足够的保护,已经成为商家和用户都十分关心的话题。系统综合运用了RSA算法原理,散列函数以及C#和.NET编程技术,实现了基于RSA算法的数字签名系统。经过测试说明,系统运行可靠稳定,实现了保证信息完整性、鉴别发送者的身份真实性与不可否认性目标。本文基于数字签名技术在电子商务中的应用,对公钥密码体制中的广泛流行的RSA算法做了深入的研究并主要阐述了利用C#语言实现基于RSA算法的数字签名方法。从两大根本模块——签名系统和认证系统着手,对数字签名进行了详细的说明和分析。关键词:数字签名;公钥密码体制;RSA;电子商务;加解密目录TOC\o"1-3"\h\u20191前言4291511软件的设计任务595621.1软件建设目标5169351.2系统的主要任务5245661.3系统性能指标571882系统需求分析542322.1系统的详细需求5154762.1.1功能需求5209362.1.2使用范围6265512.1.3输出要求61492.1.4故障处理6206502.2使用环境6205572.2.1硬件环境64932.2.2软件环境668812.3可行性分析6184873软件开发过程747523.1相关原理说明7193683.1.1RSA加密算法 727242数字签名原理 914518散列函数 10297113.2详细设计1175453.2.1操作界面设计11256733.2.2主要实现代码1516344软件测试过程24157174.1测试环境24321654.2功能测试2455045结论24273455.1遇到的问题25246145.2体会26前言自20世纪40年代计算机在美国诞生以来,计算机应用已逐渐在社会的各个领域中普及。20世纪80年代中期,随着计算机网络技术的成熟,计算机网络应用迅速普及。伴随着我国国名经济信息化进程的推进和信息技术的普及,我国各行各业对计算机网络的依赖程度越来越高,这种高度依赖使社会变得十分“脆弱”,一旦计算机网络受到攻击,不能正常工作,就会使整个社会陷入危机。所以信息与信息平安管理,已经成为社会公共平安工作的重要组成局部。信息平安的根底就是密码理论,信息平安的基密性、完整性和抗否性都依赖于密码算法。密码学主要研究两个方面:密码编码学和密码分析学。密码编码学主要研究对信息进行交换,以保护信息在信道的传递过程中不被他人窃取、解密和利用的方法,而密码分析学那么与密码编码学相反,它主要研究如何分析和破译密码。两者之间既相互对立又相互促进。密码体制的分类有很多,其中一种是根据加密算法和解密算法所使用的密钥是否相同,可以将密码体制分为对称密钥密码体制〔单钥密码体制〕和非对称密钥密码体制〔公钥密码体制〕,这两种密码体制各有自己的长处和短处,因此现在采用了两种的混合体。公钥密码体制的特点是:接收方B产生一对密钥〔PK和SK〕;PK公开,SK保密;从PK推出SK是很困难的;A、B双方通信时,A通过任何途径取得B的公钥,用B的公钥加密信息,加密后的信息可通过任何不平安信道发送。B收到密文信息后,用自己私钥解密恢复出明文。公钥密码体制已成为确保信息的平安性的关键技术。RSA公钥密码体制到目前为止还是一种被认可为平安的体制。RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也十分流行。随着越来越多的商业应用和标准化工作,RSA已经成为最具代表性的公钥加密技术。VISA、MasterCard、IBM、Microsoft等公司协力制定的平安电子交易标准〔SecureElectronicTransactions,SET〕就采用了标准RSA算法,这使得RSA在我们的生活中几乎无处不在。网上交易加密连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动和存储卡的验证功能芯片等,大多数使用RSA技术。1软件的设计任务1.1软件建设目标数字签名是当前网络平安领域的研究热点。特别是在电子商务、电子银行、电子政务等应用领域,数字签名是其关键技术之一,在社会生活的各个领域也有极其广阔的应用前景。密码技术是信息平安的核心技术。公钥密码在信息平安中担负起密钥协商、数字签名、消息认证等重要角色,已成为最核心的密码。要求在了解了数字签名技术的根本功能、原理的根底上,设计并实现基于RSA的数字签名算法。通过该软件,用户可以根据自己的需求对各种文件做各种方式的签名,确保自己信息的真实性,可靠性,不可抵赖性。1.2系统的主要任务数字签名可以解决否认、伪造、篡改及冒充问题。要求:发送者事后不能否认发送的报文签名、接受者能够核实发送者发送的报文签名、接受者不能伪造发送者的报文签名、接受者不能对发送者的报文进行局部篡改、网络中的某一个用户不能冒充另一个用户作为发送者或接受者。保障电子数据交换的平安性,但凡对用户的身份判断的情况都可以使用数字签名。在加密信件、商务信函、订货购置系统、远程金融交易、自动模式处理等等数字签名都非常重要。1.3系统性能指标保证系统响应时间、资源利用率与数据出错率等性能指标都在合理的范围之内。2系统需求分析2.1系统的详细需求功能需求RSA多功能数字签名系统完成的任务主要有:对文件进行签名,生成一个独立于原文的签名文件;可以对文件进行签名,在文件后追加签名信息能够比对已经实施的签名,防止进行重复的签名,以防止重放攻击;具有密钥管理的功能,比方密钥的生成、导入、导出;可以对word文档实施操作,对word文档的内容进行签名:使用范围这个多功能数字签名软件,可以提供应任何电子商务的卖家使用、网上交易的买家使用或者网上金融交易的个人,只要将这些计算机安装上java的jdk插件就能够使用这个软件,特别适合于电脑配置要求不高的电脑使用,占用内存空间非常小,速度快,用起来非常便捷。输出要求只要电脑有各种查看字符的文本,按照软件的输出要求操作,客户可以可以方便文本的导入导出到相应的路径文件里面。故障处理在使用的过程中,或因为电脑的配置和兼容性问题,假设出现软件按钮失控,只需关闭程序,重新翻开软件即可。2.2使用环境硬件环境效劳器:CPU:PIII500以上;内存:512M以上;硬盘:15G以上;操作系统:Windows98/2000/2003/XP/WIN7;软件环境支持VC6.0软件的效劳器操作平台。2.3可行性分析在投入使用多功能数字签名软件之前,就应该理智地立项分析需求是怎样的,但是根据综合调查了解到,现在的开网店的电子商务商或者需要的个人已经进行了良好的测试,目前需要解决的问题就是现代化缺乏,在教学的过程中往往达不到实时更新的情况,再更新这一块还有待提升。这个RSA多功能数字签名软应当把使用者的要求和开发结合在一起,讨论交流。3软件开发过程3.1相关原理说明RSA加密算法RSA加密算法是一种非对称加密算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特〔RonRivest〕、阿迪·萨莫尔〔AdiShamir〕和伦纳德·阿德曼〔LeonardAdleman〕一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯〔CliffordCocks〕在一个内部文件中提出了一个相应的算法,但他的发现被列入机密,一直到1997年才被发表。对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假设有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算技术和量子计算机理论日趋成熟的今天,RSA加密平安性受到了挑战。1983年麻省理工学院在美国为RSA算法申请了专利。这个专利2000年9月21日失效。由于该算法在申请专利前就已经被发表了,在世界上大多数其它地区这个专利权不被成认。.1公钥和私钥的产生假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:随意选择两个大的质数p和q,p不等于q,计算N=pq。根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)用以下这个公式计算d:d×e≡1(mod(p-1)(q-1))将p和q的记录销毁。(N,e)是公钥,(N,d)是私钥。(N,d)是秘密的。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。.2加密消息假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比方他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假设他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c:计算c并不复杂。Bob算出c后就可以将它传递给Alice。.3解密消息Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:得到n后,她可以将原来的信息m重新复原。解码的原理是以及ed≡1(modp-1)和ed≡1(modq-1)。由费马小定理可证明〔因为p和q是质数〕和这说明〔因为p和q是不同的质数,所以p和q互质〕.4平安假设偷听者乙获得了甲的公钥N和e以及丙的加密消息c,但她无法直接获得甲的密钥d。要获得d,最简单的方法是将N分解为p和q,这样她可以得到同余方程d×e≡1(mod(p-1)(q-1))并解出d,然后代入解密公式导出n〔破密〕。但至今为止还没有人找到一个多项式时间的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在〔见因数分解〕。至今为止也没有人能够证明对N进行因数分解是唯一的从c导出n的方法,但今天还没有找到比它更简单的方法。〔至少没有公开的方法。〕因此今天一般认为只要N足够大,那么黑客就没有方法了。假设N的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999年,数百台电脑合作分解了一个512位长的N。今天对N的要求是它至少要1024位长。1994年彼得·秀尔〔PeterShor〕证明一台量子计算机可以在多项式时间内进行因数分解。假设量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔的算法可以淘汰RSA和相关的衍生算法〔即依赖于分解大整数困难性的加密算法〕。假设有人能够找到一种有效的分解大整数的算法的话,或者假设量子计算机可行的话,那么在解密和制造更长的钥匙之间就会展开一场竞争。但从原理上来说RSA在这种情况下是不可靠的。数字签名原理用RSA算法做数字签名,总的来说,就是签名者用私钥参数d加密,也就是签名;验证者用签字者的公钥参数e解密来完成认证。下面简要描述数字签名和认证的过程。1、生成密钥为用户随机生成一对密钥:公钥(e,n)和私钥(d,n).签名过程计算消息的散列值H(M).用私钥(d,n)加密散列值:s=(H(M))modn,签名结果就是s.发送消息和签名(M,s).3、认证过程取得发送方的公钥(e,n).解密签名s:h=smodn.计算消息的散列值H(M).比拟,如果h=H(M),表示签名有效;否那么,签名无效。根据上面的过程,我们可以得到RSA数字签名的框图如图2-1:消息Hash消息Hash连接消息Hash解密比拟加密相等,真不等,假发送方私钥(d,n)发送方公钥(e,n)签名过程认证过程图3-1-2RSA数字签名框图散列函数散列函数〔或散列算法,英语:HashFunction〕是一种从任何一种数据中创立小的数字“指纹”的方法。该函数将数据打乱混合,重新创立一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。由于散列函数的应用的多样性,它们经常是专为某一应用而设计的。例如,加密散列函数假设存在一个要找到具有相同散列值的原始输入的敌人。一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。为加密散列为目的设计的函数,如MD5,被广泛的用作检验散列函数。这样软件下载的时候,就会对照验证代码之后才下载正确的文件局部。此代码有可能因为环境因素的变化,如机器配置或者IP地址的改变而有变动。以保证源文件的平安性。错误监测和修复函数主要用于区分数据被随机的过程所扰乱的事例。当散列函数被用于校验和的时候,可以用相对较短的散列值来验证任意长度的数据是否被更改正。.1MD5算法MD5即Message-DigestAlgorithm5〔信息-摘要算法5〕,用于确保信息传输完整一致。是计算机广泛使用的散列算法之一〔又译摘要算法、哈希算法〕,主流编程语言普遍已有MD5实现。将数据〔如汉字〕运算为另一固定长度值,是散列算法的根底原理,MD5的前身有MD2、MD3和MD4。1992年8月RonaldL.Rivest在向IETF提交了一份重要文件,描述了这种算法的原理,由于这种算法的公开性和平安性,在90年代被广泛使用在各种程序语言中,用以确保资料传递无误等。MD5由MD4、MD3、MD2改良而来,一度主要增强算法复杂度和不可逆性。MD5一度被广泛应用于平安领域。但是由于MD5的弱点被不断发现以及计算机能力不断的提升,现在已经可以构造两个具有相同MD5的信息,使本算法不再适合当前的平安环境。目前,MD5计算广泛应用于错误检查。例如在一些BitTorrent下载中,软件通过计算MD5和检验下载到的碎片的完整性。MD5较老,散列长度通常为128位,随着计算机运算能力提高,找到“碰撞”是可能的。因此,在平安要求高的场合不使用MD5。2004年,王小云证明MD5数字签名算法可以产生碰撞。2007年,MarcStevens,ArjenK.Lenstra和BennedeWeger进一步指出通过伪造软件签名,可重复性攻击MD5算法。研究者使用前缀碰撞法〔chosen-prefixcollision〕,使程序前端包含恶意程序,利用后面的空间添上垃圾代码凑出同样的MD5Hash值。2008年,荷兰埃因霍芬技术大学科学家成功把2个可执行文件进行了MD5碰撞,使得这两个运行结果不同的程序被计算出同一个MD5。2008年12月一组科研人员通过MD5碰撞成功生成了伪造的SSL证书,这使得在s协议中效劳器可以伪造一些根CA的签名。算法如下:MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。根本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。是XOR,AND,OR,NOT的符号。3.2详细设计操作界面设计1.操作界面图3-2-1操作界面主要分为产生密钥,产生摘要,数字签名,最后验证信息。2.产生密钥运用rsa算法提供2个素数进行计算得出的密钥对,在文本框中显示图3-2-2密钥的产生选择加密文件即要发送的文件,可以通过浏览按键进行选择,这里我们选择的是d盘下的”源文件.txt”。图3-2-3明文的选择4.摘要单击产生消息摘要按键,就会在下方的消息摘要文本框中显示明文产生的摘要。图3-2-4摘要的产生5.数字签名单击加密按键,会在下方数字签名文本框中显示摘要加密后的信息图3-2-5数字签名6.追加签名信息单击追加签名信息会在明文文件中添加一段数字签名信息,即在上方显示的字符串图3-2-6追加签名信息解密验证点击解密验证按键,在下方的文本框中就会显示出摘要的信息,与其中的摘要比照,看是否匹配。图3-2-7解密验证主要实现代码RSA算法1.1密钥voidCRsadigitalDlg::GetOnlyProperBits(char*bits){ chartmpb[40]; intti=0; //直到0字节为止 for(inti=0;i<strlen(bits);i++) { if(bits[i]=='1')break; } for(;i<strlen(bits);i++) { tmpb[ti++]=bits[i]; tmpb[ti]='\0'; } strcpy(bits,tmpb);}voidCRsadigitalDlg::D_to_B(longno,longnoOfBits,char*ou){ longy=noOfBits;//8bits strcpy(ou,""); for(longi=0;i<y;i++) { intrem=no%2; no=no/2; charst[5]; sprintf(st,"%d",rem); strcat(ou,st); //if(no==0)break; }//Xofforloop... strrev(ou);}char*CRsadigitalDlg::longtohex(longx){charstr[8]; inti=0; inta;//商 intb;//余数 longtt=x; while(tt>=16) { a=tt/16; b=tt%16; switch(b) { case0:str[i]='0';break; case1:str[i]='1';break; case2:str[i]='2';break; case3:str[i]='3';break; case4:str[i]='4';break; case5:str[i]='5';break; case6:str[i]='6';break; case7:str[i]='7';break; case8:str[i]='8';break; case9:str[i]='9';break; case10:str[i]='A';break; case11:str[i]='B';break; case12:str[i]='C';break; case13:str[i]='D';break; case14:str[i]='E';break; case15:str[i]='F';break; }; i++;tt=a; } str[i]='\0'; strrev(str); returnstr;}voidCRsadigitalDlg::Execute(){ CStringstr; //第一步产生任意素数 GeneratePrimeNumbers(); //第二步计算n=p*q m_n=m_Prime1*m_Prime2; //第三步0=(p-1)(q-1) m_Undef=(m_Prime1-1)*(m_Prime2-1); //第四步选择'e' SelectE(); //第五步计算D CalculateD(); //显示公钥和私钥 //(1)公钥KU={e,n} str.Format("{%d,%d}",m_e,m_n); m_public_key.SetWindowText(str); //(2)私钥KU={d,n} str.Format("{%d,%d}",m_d,m_n); m_private_key.SetWindowText(str);}//第四步选择一个'e'使'e'与m_Undef互素voidCRsadigitalDlg::SelectE(){ CStringstr; for(floati=2;i<100000;i++) { if(IsRelativePrime((float)m_Undef,(float)i)) { m_e=(long)i; return; } }}boolCRsadigitalDlg::IsRelativePrime(floatX,floatY){ floatR; //输入:X,Y if(X<Y)//如果X较小那么交换两个值 { X=X+Y; Y=X-Y; X=X-Y; } //在这时X总是比Y大 for(;;) { if(Y==0) break; R=fmod(X,Y); X=Y; Y=R; } if(X!=1) returnfalse; else returntrue;//互素}//第五步计算DvoidCRsadigitalDlg::CalculateD(){ floatd; longd_dash; CStringstr; for(floatk=1;k<100000;k++) { d=(m_Undef*k+1)/m_e; d_dash=(long)((m_Undef*k+1)/m_e); if(d==d_dash) { m_d=d; return; } }}voidCRsadigitalDlg::GeneratePrimeNumbers(){ CStringstr; UpdateData(TRUE);//通过以下两个函数可获得两个大素数,但增加了计算复杂性,为了方便,直接给定素数// m_Prime1=FindPrime(1);// m_Prime2=FindPrime(m_Prime1); m_Prime1=47; m_Prime2=71;}longCRsadigitalDlg::FindPrime(longignore_prime){ longodd,tmp_odd; doubletmp; srand((unsigned)time(NULL)); while(1) { odd=rand(); if(odd%2==0) odd++; if(ignore_prime==odd)continue; //测试'odd'是否为素数 for(inti=2;i<=odd/2;i++) { tmp_odd=odd%i; if(tmp_odd==0) { i=-1; break; } }//xof'for'循环 if(i!=-1) break; }//xof'while'循环 returnodd;}1.2加密voidCRsadigitalDlg::OnButton2(){ //TODO:Addyourcontrolnotificationhandlercodehere//消息摘要,8位为一组一个字符一组 charmessage[200];m_message.GetWindowText(message,200); len=strlen(message); charshowstr[1000]=""; intNO_BITS=32; doublec=0,d=1; charbits[100]; doublen=(double)m_n; unsignedcharch; doubledata;//19; longi,k=NO_BITS; intsizeof_d=sizeof(double);//将十进制数私钥d转换为二进制D_to_B(m_d,32,bits); GetOnlyProperBits(bits); k=NO_BITS=strlen(bits)-1; for(intii=0;ii<len;ii++) { //从message中读取字符放入'data'中 ch=message[ii]; data=(double)ch; //计算((data)^dmodn) c=0;d=1; for(i=k;i>=0;i--) { c=2*c; d=fmod(d*d,n); if(bits[NO_BITS-i]=='1') { c=c+1; d=fmod(data*d,n); } } //从'd'中读取字符放入result中 result[ii]=d; strcat(showstr,longtohex(d)); }//结束循环 m_result.SetWindowText(showstr);}1.3解密voidCRsadigitalDlg::OnButton3(){ //TODO:AddyourcontrolnotificationhandlercodehereintNO_BITS; doublec=0,d=1; charbits[100]; doublen=(double)m_n; doubledata;//19; longi,k;intsizeof_d=sizeof(double);//用于存储解密信息 charmessage[200];//将十进制数公钥e转换为二进制 D_to_B(m_e,32,bits); GetOnlyProperBits(bits); k=NO_BITS=strlen(bits)-1; for(intj=0;j<len;j++) { //从result中读取字符放入'data'中 data=result[j]; //计算((data)^emodn) c=0;d=1; for(i=k;i>=0;i--) { c=2*c; d=fmod(d*d,n); if(bits[NO_BITS-i]=='1') { c=c+1; d=fmod(data*d,n); } }//结束循环 //从'd'中读取字符放入message中 message[j]=d; } message[32]='\0'; m_mingwen.SetWindowText(message);1.4导入voidCRsadigitalDlg::IN_Dr(){ CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,"ALLFiles(*.*)|*.*||"); if(dlg.DoModal()!=IDOK)return; CStringfilePath=dlg.GetPathName(); CFilein; if(!in.Open(filePath,CFile::modeRead)) { MessageBox("指定文件不存在!"); return; } DWORDdwFileLen=in.GetLength(); char*buf=newchar[dwFileLen+1]; buf[dwFileLen]=0; in.Read(buf,dwFileLen); in.Close(); str=buf; deletebuf;SetDlgItemText(IDC_EDIT6,str); }1.5导出voidCRsadigitalDlg::On_ButtonZj(){ UpdateData(TRUE); //TODO:AddyourcontrolnotificationhandlercodehereCStringc_use;GetDlgItem(IDC_EDIT3)->GetWindowText(c_use);str0=c_use;ofstreamout("d:\\源文件.txt",ios::out|ios::app);out<<"&"<<c_use.GetBuffer(32)<<endl;//设置标识符,修改原文out.close();getchar(); MessageBox("追加完成!!!");}4软件测试过程软件工程在开发完成后还要进行系统测试,以测试开发出的软件的功能和性能是否到达预定要求。4.1测试环境操纵系统:Windows7编译环境:VC6.04.2功能测试可以实现对文件的数字签名,导入文件,追加签名信息,解密验证等功能,符合课设要求。5结论经过这次信息平安课程设计,我选择的题目是多功能数字签名,需要做出尽可能多数字签名方式,最后还是没有完全做出所有的功能。在设计调试的过程中,遇到很多问题,也学习到很多之前没有涉及到的解决问题的方法与知识点,虽然有些问题解决了,还有些问题没有解决,但是自己的学习能力也是有所提高,所有今后的学习要更努力才行。5.1遇到的问题在做这门个数字签名课设中,遇到了好多问题,主要有RSA算法产生密钥,导入导出时很困难,但是还是通过看书,或者上网查找资料,编写代码时不懂的函数,和参数类型都上网查,看人家成功的经验,自己再精心修改,运行错误一点一点找,经过不懈的努力终于完成了。RSA算法素数的产生,运用了2个函数m_Prime1=FindPrime(1);m_Prime2=FindPrime(m_Prime1);但是在最后解密后有的密钥不能解开,解开后的摘要跟开始生成的摘要不匹配,但是前面加密,进行摘要局部不会发生错误,最后进行解密时才会发生匹配错误,经过我发现,主要是由于算法中间出错,不能进行计算出正确的密钥对,最后只能自己在代码局部规定两个大素数。其中导入局部一开始用的是这段代码,但是始终导入不进去,老是导入的是文件的名字,一开使没有发现导入的参数没有写对,写对了之后但是后边也是不行,老是报错,查不出来,查了好多资料最后发现头文件中加的fstream.h不能用,当初写的时候就注释了,后来改了个格式终于弄好了,不会出错了。//TODO:Addyourcontrolnotificationhandlercodehere UpdateData(FALSE);//TODO:AddyourcontrolnotificationhandlercodehereCFileDialogm_FileOpen(TRUE);/设置翻开窗体的标题m_FileOpen.m_ofn.lpstrTitle=_T("翻开文件");m_FileOpen.m_ofn.lpstrFilter=_T("文件(*.*)\0*.*\0\0");//点击浏览按钮if(IDOK==m_FileOpen.DoModal()) { //获取翻开的文件路径 CStringm_FileName=m_FileOp

温馨提示

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

评论

0/150

提交评论