《RSA算法及其在加密系统中的应用研究》9700字_第1页
《RSA算法及其在加密系统中的应用研究》9700字_第2页
《RSA算法及其在加密系统中的应用研究》9700字_第3页
《RSA算法及其在加密系统中的应用研究》9700字_第4页
《RSA算法及其在加密系统中的应用研究》9700字_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

RSA算法及其在加密系统中的应用研究目

录TOC\o"1-3"\h\u14358摘要 I301111密码学简介 1295661.1什么是密码学 1187511.2研究密码学的意义 1156311.3当今社会对密码学领域的探究的水平 163592RSA算法的背景及简介 2236882.1RSA算法的背景介绍 2220892.2什么是RSA算法 3319332.3研究RSA加密算法的意义 3265362.4RSA加密算法的优缺点 3327002.4.1RSA加密算法的优点 345952.4.2RSA加密算法的缺点 3238483RSA数学基础 46243.1数论的基础知识 462903.1.2素数与合数 5133543.1.3互质数 5142303.2模算术运算 666923.2.1模运算的概念 676093.2.2模运算的性质 6317903.3欧拉定理及相关概念 793104RSA的安全性分析 891074.1对RSA的分解模数n的攻击 8141614.2对RSA的选择密文攻击 976655代码的分析与实现 10170785.1RSA加密算法描述 10204635.2实现语言介绍 10259475.3实现工具介绍 1178725.4对RSA加密算法的实现 12129985.5整体代码展示 13282975.6对RSA加密算法结果的测试 2127246参考文献 22摘要:在当今社会,信息安全问题遍布在生活中的每一个角落,党的十八大以来,习近平总书记高度重视网络安全和信息化的相关工作,并提出了一系列具有开创性意义的新观点新论断新思想,形成了习近平网络强国战略思想。在这一重要思想指引下,我国网信事业取得了积极进展和瞩目成就。其中密码学在网络安全领域发挥着极大的作用,本文将对密码学中基于RSA加密系统的分析与实现来进行研究,RSA算法是用数论模型构建出的一种算法,因其安全性好等原因,在各个领域中都有RSA加密系统的身影,但是RSA算法实现的难度方面较大,代码运行起来时间周期较长,也是较为复杂的一种算法,随着RSA算法的普遍应用,研究此算法的意义也愈发重大。在本篇文章中,我对RSA算法进行了详细的介绍,并通过对英文的加密,来更加深入的了解RSA加密系统,希望通过本篇文章大家可以对RSA加密系统有更深一步的了解。关键词:RSA加密密码学网络安全

1密码学简介1.1什么是密码学密码学是一种用来进行编制和破译密码的技术科学,数学为密码学主要的底层算法。密码中的客观规律就可以通过密码学来进行探究。从安全技术原理角度上来笼统的讲密码体制一般可再简单地分为单钥密码体制和双钥密码体制这一两大类。唯密文攻击的类型;已知明文密码攻击的类型;选择明文密码攻击的类型;选择密文攻击的类型这是密码攻击者中对于明文密码攻击类型来说较为常见的前四种密码攻击类型。1.2研究密码学的意义信息科技影响着现今时代人们日常生活、工作学习、社会生活的方方面面并在其中起到的巨大的影响,信息科技作为安全的保障也逐渐的成为了在当今时代商业社会的运作方式中的最举足轻重的‘最优质的一种战略策略资源,在信息技术的日新月异,科技的迅速的发展的同时也在潜移默化的悄然的改变了着我们现在的人们日常工作中的社会学习的生产模式及生活方式,信息产业也成为了当今世界上一种不可或缺的经济发展潮流,我们对信息安全的认识也开始逐渐全面起来。信息安全的威胁在人为防护方面的安全威胁主要来源于这两种,主要是为防止用户和恶意软件等的恶意非法入侵。信息安全问题从最初的面向军方到面向用户共享,再到用来保证世界这个复杂而又庞大的网络安全。对于这些安全威胁,我们需要通过成熟的技术手段来减少以及避免不必要的损失。对于密码学的探究也正是对安全威胁的有效防护。1.3当今社会对密码学领域的探究的水平在当今社会随着区块链,云计算,物联网等多种互联网科技的发展,生活中人们更多的选择是将自己的信息数据交给第三方的数据服务平台以便捷自己便捷他人。然而第三方服务平台也并不是百分之百安全的,也会有许多漏洞需要不断修复,攻击者往往抓住这些漏洞来盗取用户的相关信息,以此来进行牟利,这种现象是非常常见的,也是防不胜防的,所以我们务必要对交给第三方数据平台的数据来进行加密,以保证人们的信息更加安全。密码学也是与我们的生活息息相关的。与此同时,密码学的发展也给许多新兴技术带来了推广以及提升。密码技术既是来实现保护计算机系统数据及安全保密的一个重要应用技术,也是计算机用来实现计算机系统信息传输安全加密和维护网络环境安全稳定的最重要手段。2RSA算法的背景及简介2.1RSA算法的背景介绍在我们的生活中,网络信息技术无处不在。现如今,互联网时代带来的各种信息的飞速地发展也是使得我们可以获得到很多更加快速和便捷的新生活方式,同时它也会随之的带来很多网络信息和安全问题,从国家的机密信息再到我们的个人信息。网络安全与信息安全问题应当越来越受到人们的重视,如何解决网络安全,信息安全问题,也成为了社会发展的重要一环,密码学就是解决这一类问题的基础科学。本篇论文中我将主要来介绍密码学中的RSA加密算法。非对称加密算法就是指算法在加密和解密的时候,都有相同或不同种类密钥类型的密钥运算的法则,也就是说在加密计算中和解密运算分别使用着对应这两种或不同密钥类型的密钥,就不会直接知道解密密钥,这也就增大了RSA算法的安全性。RSA算法的安全性是广泛受到大家认可的,也是公钥密码体制中最具代表性的一种算法,在各个领域中都有RSA加密算法的身影,但是RSA算法实现的难度方面较大,代码运行起来时间周期较长,也是较为复杂的一种算法,随着RSA算法的普遍应用,研究此算法的意义也愈发重大。RSA的公钥密码体制最初是在公元的1978年由美国麻省理工学院的Rivest,Shamir和Adleman三个人所共同提出来的,三个人姓氏的第一个英文的首字母就是RSA这个英文名字的最早的由来。它首先提出素数的安全性基础思想,在数论基础上和数值计算理论上的复杂性理论基础研究中较为一致的两个关键性论断:求算出的两个或更大的素数因子之间的最小乘积方法在一般数值计算应用研究上来说应该会是一种相当的容易而进行起来的,但事实上若真的要想用分解掉这一两个比较大的素数因子之间的最大乘积方法去求取计算出两个大于与它最大乘积方法的素数因子将也同样在数值计算的操作技术上存在巨大的困难与问题的。2.2什么是RSA算法RSA算法是指一种用数论模型构建出来的一种密码算法,是一个到目前为止在密码理论框架里,最接近完善的,最成熟的公钥密码体制,此算法已在密码各个重要领域内也逐步得到了很广泛深入的应用。2.3研究RSA加密算法的意义RSA算法在安全性方面做的很好,容易实现用户的目的需求,RSA算法是到目前为止最为成熟的的公开密钥系统,关于RSA算法,国际上有许多论文为本课题的研究做基础,所以研究RSA加密算法是具有重要意义的。2.4RSA加密算法的优缺点2.4.1RSA加密算法的优点1、RSA算法所运用的数学基础易于理解,一环扣一环,所用算法清晰明了。2、RSA算法在加密和数字签名领域都有所应用。3、RSA算法中的算法密钥在数据安全性方面也就是相比较于其他加密的算法密钥来说在数据稳定性上面要比较高,加密密钥也和解公密算法的密钥要有些地方不一样,一般在默认加密情况下,私钥则为默认加密密钥,公钥则是为默认解密算法密钥。2.4.2RSA加密算法的缺点1、生成密钥是个很麻烦的事情,素数产生技术是有一定局限性的,很难做到Vernam加密法。2、由于RAS算法都是大数计算,无论是在软件的实现还是硬件的实现上,运算速度也比较缓慢,所以RSA算法经常应用于少量数据的运算加密。3、RSA算法的安全性主要来自依赖相对于更高大数的因子分解算法时的困难性。3RSA数学基础迄今为止,大部分的公钥密码体制算法都是一套由一些数学难题作为其理论基础的加解密机制,其中,大整数的分解困难等问题也就是RSA加密算法研究的基础。和其他大部分公钥密码体制一样,其加密算法的逆元问题决定了RSA加密算法安全性的强弱。换句话说,求把任意的两个大的素数相乘所得的结果相对还是可以很容易得的,但是如果把每一个正大数都拆分成这两个大素数的话还是有非常多困难的。所以说,我们要把这样类型的密码函数取名叫为单向密码函数。在当今我们每天所必须接触用到的各种密码学工具中,单向密函数在它们其中也占比量很大,构建这样一个公钥密码体制,单向函数也是非常重要的。在此部分,为了更好地了解RSA加密算法,我将对数论中与之相关的部分做一下基本的介绍。3.1数论的基础知识定义1:假设m和n为两个任意的整数,n不等于0,如果存在一个整数r,让m等于nr,那么就把n叫做m的公因数,m也是n的倍数,m可被n整除,可记作n|m。定义2:假设m和n为两个整数,如果存在一个整数r,使m可被r整除,n也可被r整除,那么r就是m和n的公因数,其中,在公因数里最大的那个公因数叫做最大公因数。定理1:假设m和n是两个整数,如果m等于q乘以n加r,那么q为商,r为其余数,r小于n,则m和n的最大公因数等于n和r的最大公因数。证明:假设d为m和n的最大公因数,d1为n和r的最大公因数由m等于q乘n加r,m减q乘n等于r,已知r可被d整除,由n可被d整除及r可被d整除,故d1可被d整除。反过来,d1是n和r的最大公因数,m等于q乘n加r,所以m可被d1整除,由m可被d1整除及n可被d1整除,故d可被d1整除。由d1可被d整除和d可被d1整除,可知d等于d1,所以m和n的最大公因数等于n和r的最大公因数。3.1.2素数与合数取一个大于一的整数p,如果1和它本身为p仅有的两个因子,那么我们就把p叫做质数,如果p不仅仅有1和它本身两个因子,那么我们就把p叫做合数。既不是只有一个正质数也就不是负整合正数负的负质数中也有很多个负数,0之和才是正负1,素数的个数也是有无限穷高的,而且是对其中任意数的任意一个的负正质整数,把将其分解成乘积的形式,此乘积中的所有乘数都可以是质数。公式1:整数n的标准分解式:n等于p1的e1次方乘p2的e2次方乘p3的e3次方乘p4的e4次方乘一直乘到pm的em次方。其中p1小于p2小于p3小于p4直到小于pm,ei为零或正整数。在这个公式中,如果n的取值到达非常大的时候,那么如果想要求出n的标准分解式是十分困难的,也正因为这样的困难的公式,才使得RSA算法的安全性得到了强有力的保证,这也是RSA算法中较为突出的优点,也是RSA算法中非常重要的特质,所以RSA算法适合于大数方面的运算。3.1.3互质数m,n为两个正整数,如果1是m和n唯一的公因数,那我们把这种特质叫做m和n互质。m1,m2,m3,m4.,mk为k的个正整数,如果对于其中任意一点的i不等于j,且其中i大于或等于1,j都小于和等于k,ni和nj都是互质,那么现在我们便把这点k为个的正整数就叫做两两互质。如果存在了一个同质数p并使得另外两个的正整数都可以与其互质,那么和这另外两个的正整数相乘得的数值就也称为和这个p的互质。3.2模算术运算3.2.1模运算的概念A可以为一对任意一个整数,n可为另一对正整数,存在对应着对唯一的对整数的q和的r,满足设r大于或等于为零且n大于为r,a等于为q和与对n和的乘积再加为r,则可以称作r是一个a的对数n和的模运算。A如果除以所有n次方的算术商记为q,那么[x]就应该表示为一个小于或至少等于这个x数的算术最大的整数,所以,对其中任意的一个大整数的a都应该可以这样表示即为a=[a/n次方]n+amodn3.2.2模运算的性质数学中包含着模运算的一些概念,我们可以通过这些概念发现,几乎是所有的整数的集合可以通过模运算和n次模的运算把他们直接的映射到另一个充满了整数的集合中{0,1.,(n-1)}中,这种运算的方式我们又习惯上称他为模n运算。模数运算形式也是可以说和许多其它的普通数学的数学运算的形式极为相似,他这种形式同时也很特别地适用于分配律,交换律,结合律。交换律(x+y)modn=(y+x)modn(x*y)modn=(y*x)modn结合律((x+y)+z)modn=(x+(y+z))modn((x*y)*z)modn=(x*(y*z))modn(xmodn+ymodn)modn=(x+y)modn(xmodn*ymodn)modn=(x*y)modn分配律(x+y)modn=(xmodn+ymodn)modn(x*y)modn=(xmodn*ymodn)modn(x*(y+z))modn=(x*y+x*z)modn恒等式(0+x)modn=xmodn(1*x)modn=xmodn幂模运算可以把其看成对应次数的模成运算例如15^7mod11=(15mod11)^7mod11=4^7mod11=×((4^2mod11)^3*4mod11)mod11=×(4mod114mod11)mod11=16mod11=53.3欧拉定理及相关概念数论领域中著名的欧拉定理也是建立RSA密码体制必需的一个基础理论。定理1:取一个正整数m,把正整数1到m中与m互为素数的数的个数称为ϕ(m)此函数就叫做欧拉函数。定理2:如果整数a与m互为质数,那么a^ϕ(m)≡1modm。证明:设ϕ(m)=k,r1,r2,r3,r4...rk为1,2,...,m−1中和m互为素数的数。因为a与m互为素数,所以ari和m互为素数。那么我们还需要证明ar1,ar2,...ark的模m互不相同。如果ari≡arjmodm,那么m|a(ri-rj),因为整数a和m互为素数,那么m|(ri-rj),就使得ri=rj,任意的i大于等于1,i小于等于k,ari和m互为素数,所以存在ari≡rjmodm,当ri取遍r1,r2,...rk时,rj也恰好取遍r1,r2,...rk,通过模运算的结合律可知,a^kr1r2.rk≡r1r2.rkmodm,又因为r1,r2,.rk和m互为素数,那么a^k≡1modm。证毕。定义1:如果对于我们而言有任意的两个整数模a和两个整数模p,存在任何另一个整数模b,使他们也同时都满足abmodp=1,那么我们现在我们就应该叫b为两个整数模a中的模和模p中的乘法逆元。定理3:如果同时存在着两个整数模a和模数p,gcd(a,p)=1这是模a和同时存在一个模整数数p的最小乘法逆元的唯一充要的条件。4RSA的安全性分析一般的情况下从数学理论基础角度上来讲,在RSA攻击的安全性程度中非常重要的基础是因式分解模量n的困难性的程度。在从数学技术层面上来讲,这种看法其实完全都是一个极其不正确的,那么即使是从在整个的数学领域发展中来看,到了到目前为止,也就始终也没有人被证明出攻击RSA攻击的安全性问题的一个最佳的解决的方法其实就是分解一个模数,以及分解一个大数到一个整数也其实就是一个NP的问题。从目前我们所目前在研究的另一些实际情况研究中结果来看,大整数因子的分解问题至今为止依旧可认为它是在当前为止全世界科学家都认为尚未真正能够被解决的另外一个大难题。也可能确实曾经有人在尝试过使用另一些非因子分解的途径来进行攻击RSA的这种体制,但是因子分解的n种方法远远比所有这些方法都来得要更容易得更多。所以现在我们必须说要从某种更严格的意义上来去讲,RSA体系的安全性也就是安全性基于求解对其单向函数的求可逆问题时的困难性。真正归因式分解模数为n时的系统安全性肯定都要远远地比对于RSA的单向函数的求逆时的系统安全性还要来得高,况且即便到了到目前为止,也还是确实并没有人可以去完全地证明这二者之间可以等价。有很多的学者都试图使二者的安全性等价。迄今为止,RSA应用在各种各样的领域,这使得RSA加密算法的安全性变得十分稳定且可靠。不过在一些特殊情况下,RSA算法中的一些漏洞也会导致算法受到攻击。如果我们能够认真考虑缺陷并解决的话,这些漏洞也会被我们修补。对RSA算法的攻击主要有以下几种:4.1对RSA的分解模数n的攻击在许许多多攻击的方法中对RSA的分解和对模数n的攻击是对于这种攻击最有效的一种攻击方法,对模数攻击方法中的攻击这种攻击的方法也是攻击方法其中的最有困难性的。因为如果原始密钥数数e和初始密钥模数数n等都是已经完全的公开了出来了的那么攻击者也将可能很容易地很快就会被自动的获得出了其的原始密钥信息,因为攻击这种攻击的方法所使用到的原始的密钥数和原始密钥模数等都是被完全地公开了出来的了的;如果模数的和n都等于p并乘以q,那么攻击者便可从此分解式中我们也可以直接的看出ϕ(n)=(p−1)(q−1),就可以求得ed≡1(modϕ(n)),通过此式子就可以得到解密密钥d。在数论与密码理论的研究中,大整数分解一直是一个非常重要的研究部分。接下来的部分我来叙述其他常见的对RSA算法的攻击。4.2对RSA的选择密文攻击被攻击者是选择密文攻击对象的这种方法是我们在对RSA选择密文攻击中最常用的一种方法,这种方法也是迄今为止最有效果的一种利用一个攻击对象的方法,RSA中的一些加密变换的性质也常常会引起其对于选择密文的攻击。一般来说,下面三种情况就是RSA加密变换的选择密文的攻击的方式中最常见的:(1)明文破译。某用户u进行公钥e密码后的密文y≡x^e(modn)可以被攻击者所获取,并且攻击者会尝试把消息x恢复出来。然后r<n这个不等式是随机选取的,于是我们可以通过上述式子可以算出y1≡r^e(modn),这就意味着r≡y1^d(modn)。计算y2≡(yy1)(modn)。令t≡r^(−1)(modn),则t≡y1^(−d)(modn),然后攻击者让u对消息y二进行了签名,从中得到了s≡y2^d(modn)。攻击者就可以通过t1=ts≡y1^(-d)y2^(-d)(modn)≡y1^(-d)y^dy^d(modn)≡y^d(modn)≡x进行计算,从而得到明文。(2)为骗取仲裁人签名。前提是在有仲裁者的这种情况下,要是某个用户u有错误的文件并且申请仲裁,那么也可以先将密码送给仲裁T,T就会用RSA的解密密钥来进行签名然后再发给u。要是攻击者有一条消息需要仲裁者T来进行签名,但是仲裁者T却拒绝了他的这个请求,因为这条消息里可能含有一些虚假的信息,此消息也可能来自于非法用户。但是攻击者也不是没有其他选择,他也可以通过下面的这个方式来骗取T的签名。我们把攻击者的消息设为x,第一步他需要任意的选取一个数为N,然后计算y≡N^e(modn),再来算M=yx,然后把它赠与T,m^d≡modn,e就为T签名的结果,并且将此发送给了攻击者,结果则有:(M^d(modn))N^(−1)≡(yx)^dN^(−1)≡(x^dy^dN^(−1))≡x^dNN^(−1)≡x^d(modn),这时T对x的签名就被攻击者成功骗取了。(3)伪造合法签名。攻击者可以使用自己伪造的二个消息将他们设为x1和x2,用来拼凑出他所需要的x3≡(x1x2)(modn)。要是攻击者获得到了用户u对与x1和x2的签名记为x1^d(modn)和x2^d(modn),就可以通过这个签名来计算出x3的签名,x3^d≡((x1^d(modn)(x2^dmodn))(modn)。明文的消息就可以采用杂凑函数的方式来进行高效转换,就能够非常有效地抵御试图利用选择的密文攻击来破译明文的这种方式。另外,我们为了避免针对签名的选择密文攻击,仲裁里也有相应的规定,他也不能给陌生的用户来进行签名。5代码的分析与实现5.1RSA加密算法描述(1)选取两个对其保密的大素数,我们称其为p和q。(2)我们计算p和q的乘积为n,p减1和q减1的乘积为ϕ(n),这里面的ϕ(n)就是p和q乘积n的欧拉函数。(3)选取一个正整数e,且满足整数e的值在1和ϕ(n)之间并且ϕ(n)与e的最大公因数为1.(4)通过d*e≡1modϕ(n)来算出d的值。(5)将{e,n}作为公开密钥,将{d,n}作为加密密钥。(6)在进行加密运算的时候,我们可以将明文的比特串分组,使得每个分组里面其所对应的十进制数值都小于n,再对每个明文m进行对应的加密运算c≡m^emodn。5.2实现语言介绍C语言是一种计算机编程语言,它是是面向过程的,C语言和C++、C#、Java这一系列语言是不一样的,这些语言是面向对象编程的语言。我们设计C语言的目的就是给我们可以提供出一种能够用简洁容易的方式来编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。用C语言来描述问题是非常方便的,它比那些汇编语言反应更迅速、工作量更小、可读性更好、并且且易于调试、修改以及移植,代码的质量和汇编语言的质量也是基本相当的。在一般情况下,通过C语言代码生成的目标程序,其效率仅仅比汇编语言低10%-20%。所以,系统软件方面也可以通过C语言来进行编写。在当前这个阶段下,在编程领域中,C语言的用途可谓是非常之多,汇编语言和高级语言里二者的优点C语言也全都有,并且C语言也比其它的编程语言更具有优势。C语言应用在计算机系统的设计和应用程序的编写这两大领域。与此同时,C语言的普适性较强,大多数的计算机操作系统中C语言都得以适用,并且效率显著。C语言拥有这个完整的理论体系经历了漫长的发展过程,也是编程语言中不可或缺的一部分。普适性是最强的一种编程语言就是C语言,它不仅仅可以使用高级编程语言中的功能,而且具有着汇编语言中的优点,因此相比较于其它的编程语言,它拥有自己独具的特点。这些特点具体体现在这三个方面:其一,广泛性。C语言的优劣性是可以通过所能运算的范围大小来决定的。在C语言中,它涵盖了三十四种运算符,因此C语言运算范围比许多程序语言的范围都要广泛,除此之外,C语言运算结果中的表达形式也变得多种多样。并且,多种数据结构的形式都囊括在C语言中,因此它能带动许许多多功能庞大的数据结构来进行运算。其二,简洁性。C语言中其所拥有的基础特性分为9类控制语句以及32个关键字,这些基础特性这使得它拥有极大的适用性,既能用编程人员来进行操作,又能用它来进行高级编程,这种特性避免了在语言切换中的繁琐过程。其三,结构完善。C语言是一种结构完善的语言,用它来实现应用程序是可以通过组建模块单位这种形式来完成的,并且在系统方面的应用也具备了明显的优势,所以,这个特性也可以让他应用于各种各样的编程,并且执行的效率方面会更高。5.3实现工具介绍在Windows环境下,Dev-C++对初学者是相对友好的,它是一个轻量级C/C++集成开发环境,它是自由软件,遵循GPL许可协议来分发源代码。MingW64/TDM-GCC是Dev-C++所使用的编译器。多页面窗口、工程编辑器调试器等都是它的开发环境,它既适合供C/C++语言的初学者来使用,也适合于非商业级普通开发者使用。多国语言版中涵盖了二十几个国家和地的语种。该软件是基于Delph来i编写的。Dev-C++的优点也有很多,如:(1)它集成了AStyle源代码格式整理器,在“格式化当前文件”这个按钮中,我们就能把这个窗口里的源代码按照一定的风格整理好排版格式。(2)有许多我们可以用到的源代码片段,此软件也包含在内,点击“插入”按钮即可。(3)它支持的项目开发有单文件与多文件开发这两种。并且它也能针对单文件来做编译或调试。(4)编译出错的信息可以自动显示为中文,有利初学者理解问题并解决问题。5.4对RSA加密算法的实现#include<stdio.h>//包含头文件#include<stdbool.h>//包含布尔类型头文件#include<string.h>//包含字符串处理函数头文件boolprimenumber(intg){//判断一个数是否为素数 for(intr=2;r<g;r++){//我们取r从2开始到素数减一结束,开始循环 if(g%r==0)//将素数g与r进行模运算取余 returnfalse;//若余数为零,则返回false } returntrue;//若余数不为零,则返回true}boolcoprime(intp,intq){//判断两数p,q是否互素 inta,b;//定义整数变量a和b if(q<p){//如果q小于p a=p;//将p赋值给a p=q;//将q赋值给p q=a;//将a赋值给a,也就是将q和p的值调换,保证q大于p } a=q%p,b=q/p;//将q和p取余赋值给a,将q和p取整赋值给b while(a!=0){//当a不等于零时,进行以下循环 q=p;//将p赋值给q p=a;//将a赋值给p a=q%p;//将q和p取余赋值给a b=q/p;//将q和p取整赋值给b } if(a==0&&b==q){//如果a等于0,b等于q同时满足时 printf("p与q互质,符合条件,继续\n");//输出p与q互质,符合条件,继续 returntrue;//返回true } else{ printf("不符合条件,请重新输入:\n");//否则输出不符合条件,请重新输入: returnfalse;//返回false }}intinverseelement(inte,intt){//定义一个求私钥d的函数 intd;//定义整数变量d,e,t for(d=0;d<t;d++){//从d等于零开始,且d小于t,每循环一次将d加一 if(e*d%t==1)//如果e和d的乘积与t取余等于1时 returnd;//返回到整型变量d }}voidencrypt(inte,intn){//定义一个加密函数encryptintlength;//定义一个整型变量lengh代表长度 charplaintext[100];//定义一个名字为plaintext的数组,其长度为100 printf("请输入明文:\n");//输出请输入明文: scanf("%s",plaintext);//输入想要加密的字符串 length=strlen(plaintext);//将字符串的长度赋值给lengh intmingwen[strlen(plaintext)];//定义这个符号明文 for(inti=0;i<strlen(plaintext);i++){//定义一个整型变量i//从i等于零开始,最大到字符串长度减一,进入循环 mingwen[i]=plaintext[i];//将plaintext[i]赋值给mingwen[i] printf("%d",plaintext[i]);//并输出plaintext[i] } printf("\n");//换行 printf("加密开始进行\n");//输出加密开始进行 inttemp=1;//定义整型变量temp初始值为1intciphertext[100];//定义一个名字为ciphertext的数组,其长度为100 for(inti=0;i<strlen(plaintext);i++){//从i等于零开始,最大到字符串长度减一,进入循环 for(intj=0;j<e;j++){//从j等于零开始,最大e减一,进入循环 temp=temp*mingwen[i]%n;//将temp与mingwen[i]乘积与n求余赋值给temp } ciphertext[i]=temp;//将temp值赋值给ciphertext[i] temp=1;//将1赋值给temp } printf("加密密文为:\n");输出加密密文为: for(inti=0;i<strlen(plaintext);i++)//定义一个整型变量i//从i等于零开始,最大到字符串长度减一,进入循环 printf("%d",ciphertext[i]);//输出加密密文 printf("\n已完成加密\n");//输出已完成加密 }intmain(){//定义一个主函数 intq,p,e,d,n,t,x,zop;//定义整型变量q,p,e,d,n,t,x,zop while(1){//无限循环的执行循环体 printf("请输入p:",p);//输出请输入pscanf("%d",&p);//输入p的值 zop=primenumber(p);//将primenumber(p)赋值给zop if(zop==0){//如果zop的值不符合 printf("p不是素数,请重新输入p!\n");//输出p不是素数,请重新输入p! continue;//继续执行判断素数函数 } printf("请输入q:",q);//输出请输入q:scanf("%d",&q);//输入qzop=primenumber(q);//将primenumber(q)赋值给zop if(zop==0){//如果zop的值不符合 printf("q不是素数,请重新输入q!\n");//输出q不是素数,请重新输入q! printf("请输入q:",q);//输出请输入q:scanf("%d",&q);//输出q zop=primenumber(q);//将primenumber(q)赋值给zop } n=q*p;//将p,q乘积赋值给n t=(q-1)*(p-1);//

温馨提示

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

评论

0/150

提交评论