版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科学生毕业论文论文题目:基于RSA的加密算法研究学院:电子工程学院年级:2021级专业:电子信息科学与技术姓名:学号:指导教师:2021年4月30日摘要RSA作为一种重要的公开密钥算法,它是继Merkle背包算法出现不久之后,出现的第一个比拟完善的公开密钥算法,它既能用于加解密也能用于数字签名。现在主要阐述其根本原理,加解密的实现,以及着重的讨论其平安性,并用C语言来实现。关键词加密算法;RSA;平安性;C语言AbstractRSAalgorithmisoneofthemostimportantpublic-keyencryptionalgorithm.Itwasthefirstperfectpublic-keyencryptionalgorithmaftertheMerklebackpackalgorithmhadappearedsoon.Itcansbeusedforencryptionordecryption.Alsobeusedthedigitalsignature.Now,Imainlyexplainthebasicprincipleofthepublic-keyencryptionalgorithm,realizetheencryptionordecryptionbyClanguage,anddiscussthesafetyofthepublic-keyencryptionalgorithm.KeywordsEncryptionalgorithm;RSA;Security;Clanguage目录TOC\o"1-5"\h\z\u摘要 IAbstract II第一章绪论 11.1RSA的研究背景与意义 11.2RSA的国内外开展趋势 11.3本文做的工作及文章结构 2第二章RSA公钥密码 32.1RSA算法简介 32.2加解密算法描述 32.2.1RSA利用了单向陷门函数 32.2.2RSA密钥对生成与加解密 42.2.2.1RSA密钥对的生成 4RSA加解密算法 42.2.2.2.1加密过程 42.2.2.2.2解密过程 4加解密流程 52.3RSA设计流程 5第三章RSA的平安性分析 63.1RSA的平安性 63.2RSA的攻击方法 63.2.1因子分解法 63.2.2选择密文攻击 73.2.3共模攻击 83.2.4低加密指数攻击 93.2.5低解密指数攻击 93.2.6计时攻击 93.3使用RSA的一些限制 10第四章RSA的C语言的具体实现 114.1RSA的速度 114.1.1硬件实现 114.1.2软件实现 114.2算法加密结果 114.2.1加密算法的C代码 114.2.2加密所得结果 19结论 20参考文献 21附录 23致谢 29第一章绪论1.1RSA的研究背景与意义随着通信与计算机网络技术的快速开展和公共信息系统商业性应用步伐的加快,人们对网络环境和网络信息资源的依赖程度的日亦加深,这时,网络信息平安的重要性也就从各个方面〔电子政务、电子商务、网络金融、网络媒体〕表达了出来[1]。而产生网络信息平安问题的根源可以从三个方面分析:自身缺陷,开放性和人的因素[2]。首先,网络自身的平安缺陷主要表达在协议和业务的不平安上,而协议的不平安主要原因是:一方面互联网起源的出忠是进行学术交流和信息的沟通,并非商业目的而导致缺乏平安的总体设想和设计。另一方面是协议本身的泄漏。然而业务上的不平安表现在错误信息或业务本身的不完善。其次,网络的开放性表达在业务是基于公开的协议等原因。最后,人的因素才是最主要的因素,表现为三方面:人为的无意失误,黑客攻击,管理不善。随着这些问题不断的出现,网络信息平安的意义也就表达出来了:从大的方面说,网络信息平安关系到国家主权的平安、社会的稳定、民族文化的继承和发扬等。从小的发面说,网络信息平安关系到公私财产和个人隐私的平安。因此,密码学在网络信息平安中发挥的重要性也表达了出来。密码技术是实现网络信息平安的核心技术,是保护数据最重要的工具之一。最常用的技术有:数据加密标准DES、高级加密标准AES、RSA算法、椭圆曲线密码算法ECC、IDEA算法、PGP系统等[3]。1.2RSA的国内外开展趋势2021年2月27日到3月2日在美国旧金山举办的RSA信息平安大会上,网络平安,云平安仍然是时下最为热点的话题。而其中云平安仍是2021、2021和2021年度最耀眼的新星,围绕着云平安与网络平安提出了许多问题以及解决的方法,比方:云平安需要急迫解决的平安隐患[4];云计算是转变平安交付方式的时机[5];云平安将成为2021平安领域趋势[6];平安专家看RSA大会焦点:云平安准备出发[7];RSA大会三大主题:网络计犯罪,云计算,IT消费[8];平安风向标:品味RSA2021信息平安大会[9];RSA2021主题揭秘:伟大的密码比剑更有力[10];新的平安威胁面前需要新的平安架构[11]。另外,前人针对RSA所做的一些研究,比方:RSA算法的改良[12];基于AES与RSA混合加密策略的硬盘分区加密技术[13];一种基于RSA的加密算法[14];RSA密码算法的研究与改良实现[15];RSA加密算法的研究及应用[16]等等。1.3本文做的工作及文章结构本文依旧是对RSA加密算法进行研究以及利用C语言进行实现。主要分为以下四章:第一章绪论局部,对RSA算法的背景意义、国内外的开展趋势进行了大致的介绍。第二章RSA公钥密码,主要介绍其算法简介,算法的原理以及加解密的实现。第三章平安性分析,主要介绍了各种对RSA的攻击方法以及在设计RSA中应该防止的一些问题。第四章RSA的C语言的具体实现,主要介绍一局部用C语言实现RSA的局部代码和加密所得到的结果。第二章RSA公钥密码2.1RSA算法简介公开密码算法与其他密码学完全不同,它是基于数学函数而不是基于替换或置换。与使用一个密钥的对称算法不同,公开密钥算法是非对称的,并且它使用的是两个密钥,包括用于加密的公钥和用于解密的私钥。公开密钥算法有RSA、Elgamal等。RSA公钥密码算法是由美国麻省理工学院〔MIT〕的Rivest,Shamir和Adleman在1978年提出来的,并以他们的名字的有字母命名的。RSA是是第一个平安、实用的公钥密码算法,已经成为公钥密码的国际标准,是目前应用广泛的公钥密码体制。RSA的根底是数论的Euler定理,其平安性基于大整数因子分解问题的困难性,公私钥是一对大素数的函数。并且该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否地RSA的平安性,但这不恰恰说明该算法有其一定的可信度。2.2加解密算法描述2.2.1RSA利用了单向陷门函数如下列图[17]所示:私钥私钥公钥图1-1RSA利用单向陷门函数的原理RSA密钥对生成与加解密2RSA密钥对的生成首先,选取两个互异的大素数,令其为和〔保密〕,并且为获得最大程度的平安性,要让与相同长度。然后计算乘积〔公开〕:〔1-1〕〔1-2〕其次,随机选取加密密钥,使其与互素,即,然后用扩展的Euclid算法计算密钥:〔1-3〕即〔1-4〕注意,和可以公开,两素数与不再需要,可销毁,但不能泄露。2.2.2.2RSA加解密算法2.2.2.2.1加密过程首先,将明文比特分组,使其每个分组对应的十进制数小于,即分组长度小于,后对每个明文分组做加密运算,其具体步骤如下:获得其接收方公钥〔e,n〕;把消息M分组为长度L()的消息分组M=;利用加密算法计算出密文〔公式如下〕;〔1-5〕将密文C发送给对方。2.2.2.2.2解密过程〔1〕接收方收到密文C并把密文按照长度为L分组得;〔2〕利用私钥和解密算法计算〔公式如下〕;〔1-6〕〔3〕得到明文消息。2.2.3加解密流程如下列图[16]所示:发送者发送者加密系统密文明文明文解密系统接收者图1-2加解密流程图2.3RSA设计流程如下列图[18]所示:信息输入模块信息输入模块素数产生模块素数测试模块产生密钥模块加密模块解密模块信息输出模块图1-3RSA设计流程第三章RSA的平安性分析3.1RSA的平安性从理论上讲RSA的平安性完全依赖于分解大数的难度。但从技术上讲这是不正确的,这只是一种推测。从数学上从未证明需要分解才能从和中计算出。用这种完全不同的方法来对RSA进行密码分析这还只是一种假想。而我并不认为这种新方法能让密码分析者推算出。当然,也可通过猜想〔p-1〕〔q-1〕的值来攻击RSA,但这种攻击没有分解容易。对那些仍持极端疑心态度的人来说,有些RSA的变型已经被证明和大数分解同样困难,可参见[19],它给出了从RSA加密的密文中恢复某一位与恢复出整个文本同样困难这一结论。可以看出分解是最显而易见的攻击方法。敌方手中有公开密钥和模数,所以要找到解密密钥,就必须分解。目前,129为十进制数字的模数是能分解的临界数。所以,应该大于这个数。对于密码分析者而言,他有可能尝试每一种可能的,直到获得正确的一个。这种穷举攻击并没有试图分解更有效。随着时间的推移,人们声称已经找到了破译RSA的简单方法,但是直到现在这些宣称还是站不住脚的。举例来说,1993年WillianPayne的论文草案中提到了一种基于费尔马小定理的方法[20]。很不幸,它的速度仍然比分解模数要慢很多。3.2RSA的攻击方法3.2.1因子分解法RSA密码体制平安性主要依赖的是大整数因子分解的问题,那么,试图分解模数的素因子就是攻击RSA最直接的方法。出现的比拟早的因子分解分析法是试除法,它的根本思想是:密码分析者完全尝试小于的所有素数,直到找到因子。而根据素数理论,尝试的次数上限是。虽然这种方法非常有效,但是对于超大数,这种方法对资源的消耗在现实之中几乎是不可能实现的。后来也出现了一些比拟重要的因子分解分析法,比方:Pollard在1974年提出的因子分解法,Williams提出的因子分解法,二次筛〔QuadraticSieve〕因子分解法,椭圆曲线因子分解法,数域筛〔NumberFieldSieve〕因子分解法等常用方法。除了因子分解法的长足开展之外,并行计算和网络上分布式计算也多加快了因子分解的速度,如下表[21]:表2-1因子分解位数年度位数〔十进制〕1984711994129199915520031742005200然而,随着因子分解位数的增加,人们可能会疑心因子分解是不是计算上的难题。但是由于银子分解的时间复杂性并没有降为多项式时间,因此,因子分解还是计算上的难题,只是需要考虑使用较大的位数,来确保无法在短时间内被攻破。3.2.2选择密文攻击有一些攻击是专门针对RSA的实现。他们不是攻击根本的算法,而是攻击协议。仅仅会使用RSA是不够的,实现的细节也是非常重要的。实例1:Eve在Alice通信的过程中进行窃听,想方法成功的选取了一个用她的公开密钥加密的密文。Eve想从中读出消息,那么从数学上讲,也就是她想得到,这里:〔2-1〕为了恢复出完整的,她首先选取了一个随机数,且满足小于。她得到了Alice的公开密钥,然后进行计算:〔2-2〕〔2-3〕〔2-4〕如果成立,那么就成立现在,Eve让Alice用其私人密钥对签名,便于解密〔注意,Alice以前从未见过〕。那么Alice发送给Eve:〔2-5〕现在Eve计算如下内容:〔2-6〕Eve就获得了。实例2:Eve想让Alice对签名。她生成两份消息,满足如下要求:〔2-7〕如果,她也能让Alice对和进行签名,就能计算:〔2-8〕因此,我们应该谨记,绝对不要对陌生人提交的随机消息进行签名。并且要先利用单向散列函数对消息进行散列运算。ISO9796分组格式可以防止这种攻击。3.2.3共模攻击有这样一个可能的RSA实现,每个人都具有相同的值,但他们有不同的指数和。然而,不幸的是:这样做是不行的。最显而易见的问题便是:假设同一个消息用两个不同的指数进行加密,并且这两个密钥有互素〔一般情况下〕。那么不需要任何一个解密指数就可以恢复出明文。假设是明文消息,两个加密密钥为和,共同模数为。那么两个密文为:〔2-9〕〔2-10〕那么密码分析者就知道n,,,和,他是如何恢复出的,如下所示:由于和互素,那么有扩展Euclid算法就能找出和,满足于:〔2-11〕假设为负数〔或中有一个必须为负〕,那么再用Euclid算法可以计算,然后那么有下式:〔2-12〕因此,我们应该谨记不要在一组用户之间共享。3.2.4低加密指数攻击在对RSA进行加密和数字签名验证中,如所选值较小倒是可以加快速度,但这是不平安的。如果,你采用相同的值以及不同的RSA公开密钥,对个线性相关的消息进行加密,那么将存在一种能攻击系统的方法。如果消息较短或消息不相关,将不存在这个问题。如消息相同,那么个消息就足够了。阻止这种攻击最简单的方法就是利用独立随机值填充消息。这也就能保证成立。因此,我们应该谨记在家加密前要用随机值进行消息的填充,用以确保和的大小是一样的3.2.5低解密指数攻击MichaelWiener给出了另外一种攻击方法,假设到达的1/4大小,并且小于,那么该方法将可以恢复。如果与随即进行选择,那么该攻击将很少发生;如果的值很小,那么他将不可能发生。因此,我们应该谨记选择大的。3.2.6计时攻击公钥密码算法的运行时间经常因为输入的不同而表现出细微的差异。而由于攻击者可以高精度的有效的测量公钥密码算法因为输入的不同而表现在运行时间上的差异,并且由于这些差异可能包涵了私钥信息,因而有可能利用这些信息推导出私钥。实施计时攻击的攻击者,就需要对于公钥密码算法具体实现的技术细节具有相当的了解才可以进行这种方法的攻击。3.3使用RSA的一些限制首先对于所选取的素数对,应该有如下要求[22,23]:〔1〕和的长度相差不大〔2〕和都有大素数因子〔3〕应该尽可能小〔4〕与差值不应该太小其次,仅有平安的密码算法是缺乏够的。整个密码系统必须是平安的,甚至密码协议也必须是平安的。因此,有如下的限制[21]:〔1〕如知道对于一个给定模数的加解密密钥指数对,那么攻击者就能分解这个模数。〔2〕如知道对于一个给定模数的加解密秘钥指数对,那么攻击者无需分解n就可以计算出别的加解密对。〔3〕在通信网络中,利用RSA实现的协议不应该使用公共模数。〔4〕消息必须用随机数来填充用以防止对加密指数的攻击。〔5〕解密指数应该无限大。第四章RSA的C语言的具体实现4.1RSA的速度4.1.1硬件实现在硬件实现时,DES比RSA快大约1000倍。在512位模数的硬件中,最快的是VLSI硬件,其可实现的吞吐量为64位/秒。当然,也有一些可实现1024位的RSA的加密芯片。到1995年,具有512位模数的芯片可到达1M/秒。在智能卡中已经大量实现了RSA,但这些实现大多较慢。4.1.2软件实现在软件实现时,RSA比DES大约慢100倍。当然这些数字会随着技术的开展而发生相应的变化,但是RSA的速度不会也不可能到达对称算法的速度。下表给出了RSA软件速度的实例[21]:表3-1具有8位公开密钥的RSA对于不同长度模数的加密速度512位768位1024位加密0.03秒0.05秒0.08秒解密0.16秒0.48秒0.93秒签名0.16秒0.52秒0.97秒验证0.02秒0.07秒0.08秒4.2算法加密结果4.2.1加密算法的C代码〔1〕小素数的实现#include<stdio.h>intcandp(inta,intb,intc)//数据处理函数,实现幂的取余运{intr=1;b=b+1;while(b!=1){r=r*a;r=r%c;b--;}printf("%d\n",r);returnr;}intfun(intx,inty)//公钥e与t的互素判断{intt;while(y){t=x;x=y;y=t%y;}if(x==1)return0;//x与y互素时返回0elsereturn1;//x与y不互素时返回1}voidmain(){intp,q,e,d,m,n,t,c,r;printf("请输入两个素数p,q:");scanf("%d%d",&p,&q);n=p*q;printf("计算得n为%3d\n",n);t=(p-1)*(q-1);//求n的欧拉数printf("计算得t为%3d\n",t);printf("请输入公钥e:");scanf("%d",&e);if(e<1||e>t||fun(e,t)){printf("e不合要求,请重新输入:");//e<1或e>t或e与t不互素时,重新输入scanf("%d",&e);}d=1;while(((e*d)%t)!=1)d++;//由公钥e求出私钥dprintf("经计算d为%d\n",d);printf("加密请输入1\n");//加密或解密选择printf("解密请输入2\n");scanf("%d",&r);switch(r){case1:printf("请输入明文m:");//输入要加密的明文数字scanf("%d",&m);c=candp(m,e,n);printf("密文为%d\n",c);case2:printf("请输入密文c:");//输入要解密的密文数字scanf("%d",&c);m=candp(c,d,n);printf("明文为%d\n",m);}}〔2〕函数说明//!MAX是数组的最大个数,LEN为结构体slink的占用内存空间大小*/#defineMAX100#defineLENsizeof(structslink)//!#能够进行动态链接库编译的RSA类/*!@seeclass_declspec(dllexport)RSA将RSA算法写成动态链接库的形式方便调用,其中有公钥,私钥和明文就可以进行明文的加密和解密*/class_declspec(dllexport)RSA{public://!#新定义的数据结构slink/*!@seestructslink数据结构中,bignum存储的是随机生成的大数,next是指向后面的指针@seeintbignum[MAX]*/typedefstructslink{intbignum[MAX];/*!<bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/structslink*next;}slink;public://!#RSA的构造函数/*!@seeRSA()其中应该对RSA类中的一些变量进行相应的初始化*/RSA();//!#RSA的析构函数/*!@see~RSA()释放内存*/~RSA();public://!#RSA的大数运算函数库/**@大数比拟函数@seeintcmp(int,int)*/intcmp(inta1[MAX],inta2[MAX]);/**@大数类型转换函数@seevoidmov(inta[MAX],int*b);*/voidmov(inta[MAX],int*b);/**@大数乘积函数@seevoidmul(inta1[MAX],inta2[MAX],int*c);*/voidmul(inta1[MAX],inta2[MAX],int*c);/**@大数相加函数@seevoidadd(inta1[MAX],inta2[MAX],int*c);*/voidadd(inta1[MAX],inta2[MAX],int*c);/**@大数大数相减函数@seevoidsub(inta1[MAX],inta2[MAX],int*c);*/voidsub(inta1[MAX],inta2[MAX],int*c);/*!@大数取模函数@seevoidmod(inta[MAX],intb[MAX],int*c);@attention/c=amodb//注意:经检验知道此处A和C的数组都改变了。*/voidmod(inta[MAX],intb[MAX],int*c);/*!@大数相除函数@seevoiddivt(intt[MAX],intb[MAX],int*c,int*w);@attention//试商法//调用以后w为amodb,C为adivb;*/voiddivt(intt[MAX],intb[MAX],int*c,int*w);/*!@解决了m=a*bmodn;/*!@seevoidmulmod(inta[MAX],intb[MAX],intn[MAX],int*m);*/voidmulmod(inta[MAX],intb[MAX],intn[MAX],int*m);/*!@解决m=a^pmodn的函数问题/*!@seevoidexpmod(inta[MAX],intp[MAX],intn[MAX],int*m);*/voidexpmod(inta[MAX],intp[MAX],intn[MAX],int*m);/*!@判断是否为素数@seeintis_prime_san(intp[MAX]);*/intis_prime_san(intp[MAX]);/*!@判断两个大数之间是否互质@seeintcoprime(inte[MAX],ints[MAX]);*/intcoprime(inte[MAX],ints[MAX]);/*!@随机产生素数@seevoidprime_random(int*p,int*q);*/voidprime_random(int*p,int*q);/*!@产生素数e@seevoiderand(inte[MAX],intm[MAX]);*/voiderand(inte[MAX],intm[MAX]);/*!@根据规那么产生其他的数@seevoidrsad(inte[MAX],intg[MAX],int*d);*/voidrsad(inte[MAX],intg[MAX],int*d);/*!@求解密密钥d的函数(根据Euclid算法)@seeunsignedlongrsa(unsignedlongp,unsignedlongq,unsignedlonge);*/unsignedlongrsa(unsignedlongp,unsignedlongq,unsignedlonge);//!#RSA的产生大数的公钥和私钥的函数/*!@seeboolRSAKey();@param没有任何输入,@param随机产生e,d,n的函数,其运行时间比拟长,需要等待@return[bool]成功返回true,失败返回false*/boolRSAKey();//!#RSA的进行文件加密的函数/*!@seestringtencrypto(inte[MAX],intn[MAX],char*text);@param[int[]e,n为随机产生的公钥,利用公钥进行加密@param[char*text为明文,明文以char*的格式存储@return[string]返回值为加密成功之后的密文,采用string类型进行存储*/stringtencrypto(inte[MAX],intn[MAX],char*text);//!#RSA的进行文件解密的函数/*!@seestringtdecrypto(intd[MAX],intn[MAX],stringtext);@param[int[]d,n为私钥,由函数RSAKey()产生@param[stringtext为密文,对应加密函数,密文的格式为string@return[string]解密之后的明文采用string进行存储*/stringtdecrypto(intd[MAX],intn[MAX],stringtext);public:/**@brief定义的全局变量,存储密钥*/intp[MAX],q[MAX],n[MAX],d[MAX],e[MAX],m[MAX],p1[MAX],q1[MAX];private:inti;charc;//structslink*head,*h1,*h2;};注意:完整的随机生成素数的C语言实现代码[24]见附录。4.2.2加密所得结果图4-1C语言实现结果结论一方面,本文做了以下几方面的工作:〔1〕对密码学、信息平安做了些简要的介绍,并且简明扼要的介绍了信息平安的开展趋势,而且阐述了RSA加解密体制的一些现状。〔2〕介绍了RSA加解密用到的数论的根本思想,研究了RSA公钥密码体制的原理,并着重的讨论、分析了RSA的平安性以及参数的选择问题。〔3〕对RSA算法的加解密原理进行了深入浅出的细致的研究,同时构建了主要包括:大素数的产生、密钥对的生成、模幂运算实现〔见附录〕,三大模块的RSA算法系统框架。另一方面,由于时间和能力有限,本文还有有待改善的诸多地方,比方:〔1〕特殊素数的快速生成算法有待进一步的研究实现。如果采用中的剩余定理,将会大大提高加解密速度。〔2〕争取自己开发一套及数据加密、认证、密钥产生等功能于一体的完整的RSA应用平台。参考文献[1]LITie-niu,LIHong-da.RationalDistributedComputationOfTheRSAPrivateKeyOverTheSharedEulerTotientFunction[J].计算机工程与科学,2021.[2]HANSong,WANGJi.NewProvablySecureSignatureScheme[N].北京大学学报.2003(5).[3]SunBaolin,WuChannghai.ResearchontheRSAPublic-KeyCipherAlgorithmandSecretSharingProblem[N].武汉理工大学学报,2002(3)[4]赛迪网.RSA2021:云平安需急迫解决的平安隐患[R].旧金山:赛迪网,2021.[5]Cent.RSA2021:云计算是转变平安交付方式的时机[R].旧金山:Cent,2021.[6]赛迪网.RSA主席认为云平安成2021平安领域趋势[R].旧金山:赛迪网,2021.[7]赛迪网.平安专家看RSA大会焦点:云平安准备出发[R].旧金山:赛迪网,2021.[8]赛迪网.RSA大会三大主题:网络计犯罪,云计算,IT消费[R].旧金山:赛迪网,2021.[9]魏晨.平安风向标:品味RSA2021信息平安大会[R].旧金山:赛迪网,2021.[10]木淼鑫.RSA2021主题揭秘:伟大的密码比剑更有力[R].旧金山:赛迪网,2021.[11]四夕.新的平安威胁面前需要新的平安架构[R].旧金山:赛迪网,2021.[12]陈磊.RSA算法的改良[N].中国软件评测中心,2021.[13]董军利,宋福刚,管文强.基于AES与RSA混合加密策略的硬盘分区加密技术[J].微电子学与计算机,2021,29(1):135-137.[14]王茜,倪建伟.一种基于RSA的加密算法[J].重庆大学学报,2005,28(1):68-72.[15]周升力.RSA密码算法的研究与改良实现[J].现代计算机,2021:51-53.[16]管占明,邓亚娟.RSA加密算法的研究及应用[J].科技广场,2021:98-99.[17]胡向东,魏琴芳等.应用密码学[M].北京市:电子工业出版社,2021:114-119.[18]李青,李雄伟,金涛.RSA算法的研究与简单实现[J].网络平安技术与应用,2007:88-91.[19]W.Alexi,O.Goldreich,.RSAandRabinFunctions:CertainPartsareashardasthewhole.SIAMJournalonComputing.V.17,n.2,Apr1988:pp.194-209.[20]W.H.Payne.Publickeycryptographyiseasytobreak.WilliamH.Payne,unpublishedmanuscript,16Oct90.[21]吴世忠,祝世雄等〔译〕,BruceSchneier〔著〕.应用密码学[M].北京市:机械工业出版社,2007:334-340.[22]谷利泽,郑世慧,杨义先.现代密码学教程[M].北京邮电大学出版社,2021:218-225.[23]卢开澄.计算机密码学[M].北京市:清华大学出版社,2002:73—77[24]史子荣.软件加密技术从入门到精通[M].北京市:清华大学出版社,2007:74-77.附录unsignedlongRSA::rsa(unsignedlongp,unsignedlongq,unsignedlonge)/*/求解密密钥d的函数(根据Euclid算法)*/{unsignedlongg,k,r,n1,n2,t;unsignedlongb1=0,b2=1;g=(p-1)*(q-1);n1=g;n2=e;while(1){k=n1/n2;r=n1-k*n2;if(r!=0){n1=n2;n2=r;t=b2;b2=b1-k*b2;b1=t;}else{break;}}return(g+b2)%g;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////!RSA的进行文件加密的函数/*!*@param[in]e,n为随机产生的公钥,利用公钥进行加密*@param[in]text为明文,明文以char*的格式存储*@return[string]返回值为加密成功之后的密文,采用string类型进行存储*@pre\e进行加密的过程中进行了数据类型的转换*@seee,d,n&text*/stringRSA::tencrypto(inte[MAX],intn[MAX],char*text)/*//对有需要的文件进行加密*/{inti,k,count,temp,c;charch;structslink*p,*p1,*p2;structslink*h;h=p=p1=p2=(structslink*)malloc(LEN);h=NULL;if(text==NULL){returnNULL;}count=0;intj;for(j=0;j<strlen(text);j++){ch=text[j];c=ch;k=0;if(c<0){c=abs(c);/*/把负数取正并且做一个标记*/p1->bignum[MAX-2]='0';}else{p1->bignum[MAX-2]='1';}while(c/10!=0){temp=c%10;c=c/10;p1->bignum[k]=temp;k++;}p1->bignum[k]=c;p1->bignum[MAX-1]=k+1;count=count+1;if(count==1)h=p1;elsep2->next=p1;p2=p1;p1=(structslink*)malloc(LEN);}p2->next=NULL;stringres;p=p1=(structslink*)malloc(LEN);p=h;if(h!=NULL)do{expmod(p->bignum,e,n,p1->bignum);ch=p1->bignum[MAX-2];res+=ch;if((p1->bignum[MAX-1]/10)==0)/*/判断p1->bignum[99]的是否大于十;*/{ch=0+48;res+=ch;ch=p1->bignum[MAX-1]+48;res+=ch;}else{ch=p1->bignum[MAX-1]/10+48;res+=ch;ch=p1->bignum[MAX-1]%10+48;res+=ch;}for(i=0;i<p1->bignum[MAX-1];i++){ch=p1->bignum[i]+48;res+=ch;}p=p->next;p1=(structslink*)malloc(LEN);}while(p!=NULL);returnres;}//!RSA的进行文件解密的函数/*!*@param[in]d,n为私钥,由函数RSAKey()产生*@param[in]text为密文,对应加密函数,密文的格式为string*@return[string]解密之后的明文采用string进行存储*@pre\e进行解密的过程中进行了数据类型的转换*@seee,d,n&text*/stringRSA::tdecrypto(intd[MAX],intn[MAX],stringtext){structslink*h,*p1,*p2;charch;inti,j,k,c,count,temp;i=0;j=3;count=0;h=p1=p2=(structslink*)malloc(LEN);intkk;for(kk=0;kk<text.length();kk++){ch=text.at(kk);c=ch;if(j==3){p1->bignum[MAX-2]=c;j--;}elseif(j==2){temp=c-48;j--;}elseif(j==1){p1->bignum[MAX-1]=temp*10+c-48;j--;}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床疗效评价标准与指标体系-洞察与解读
- 快递员劳动合同范本
- 2025石油购销居间合同范本
- 物理基本常识题库及答案
- 房缺封堵术考试题及答案
- 2025人工智能讲师秋招题目及答案
- 2025关于商业房产开发的借款合同
- 江西中考地理真题及答案
- 2025秋招:专员题库及答案
- 2025年机械设计技术题库及答案
- 电工考证专栏2025年低压电工复审考试题库精细讲解(1)附答案
- 物流搬运劳务合同范本
- 隧道工程施工质量常见问题及解决方案
- 2025-2026学年苏教版三年级科学上册期中达标测试卷(三)含答案与解析
- 2025年党校条例试题及答案详解
- 2025年国家能源集团企业文化考试题库及答案
- 看一次禁毒电影活动方案
- 2025太原迎泽区社区劳动保障协理员和城镇最低生活保障协理员招聘考试模拟试题及答案解析
- 消防公司企业简介
- 【QC成果】提高砌体结构一次成型合格率
- 大数据金融课件
评论
0/150
提交评论