您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页公开密钥算法RSA策略及程序实现

公开密钥算法RSA策略及程序实现

来源:化拓教育网
第9卷第2期浙江工商职业技术学院学报Vol。9No.22010年6月JournalofZhejiangBusinessTechnologyInstituteJun.2010公开密钥算法RSA策略及程序实现毛建儿(余姚四职校,浙江宁波315470)摘要:随着通信的飞速发展,信息安全显得越来越重要,计算机密码的基本思想就是将要保护的信息变成伪装信息,在公开密钥算法提出之前,所有密码系统的解密密钥和加密密钥彼此有着直接的联系。这也是秘密密钥的缺陷所在。为此公开密钥算法RSA算法就顺应而生。这种叫加密算法可用VB程序编程实现。关键词:密钥弱点;公开密钥;策略;程序中图分类号:TP309.7文献标志码:A文章编号:1671-9565(2010)02-036-03RSAPublicKeyAgorithmandProcessRealizationMA0Jian—er(TheFourthYuyaoProfessionalschool,M,1960315470,China)Abstract:Safetyofinformationisgettingmoreandmoreimportantwitlltherapiddevelopmentoftele—communications.Theessentialideaofthecodesystemofcomputersistochangetheinformationtobeprotectedintocamouflagedinformation.BeforepublickeyalgorithmcanleintobeiIlg,thedecryptionandencrypfionofallthecodingsystemsareinterrelated,whichisitsdeficiency.Tosolvetheproblem,RSARivest-Shamir-Adlemanpublickeyalgorithmcalnea10ng,whichcallberealizedwithVBprocess.Keywords:deficiencyofpublickeyalgorithm;publickeyalgorithm;strategy;process随着通信的飞速发展,信息安全显得越来越重要,计首先满足M<n,计算其对应密文为:C=Me(modn);若对C解密,计算M=Cd(modn)。加密参数为e和n,此为公开密钥(e,n);解密参数为d和n,此为私人密钥(d,n)。举例来说,假设取p=3,q=11,则计算n=33,z=20。由于3和20没有公因子,因此取d=3,解方程3・e=1(rood20),得到e=7。的加密思想——公开密钥算法RSA算法。因此公开密钥为(7,33),私人密钥为(3,33)。假设加密明公开密钥算法的思路与加密密钥和解密密钥不同,加文M:4,则计算密文C=Me(modn)--47(mod33)=16;若要对收到密文进行解密,计算明文方法:M=Cd(modn)=163(mod33)--4,恢复出原文。根据RSA算法,可以对以下几个环节进行具体分析。首先是选择素数p,q。理论上应选择两个大素数(典型值大于10100),考虑到程序的容易实现。这里采用了1—50,由于没有直接可用的素数判断的函数,因此素数的z)。而对于明文M,产生由自定义函数PrimeNumbem()。-36・万方数据算机密码的基本思想就是将要保护的信息变成伪装信息,在公开密钥算法提出之前,所有密码系统的解密密钥和加密密钥都彼此有着直接的联系,这是秘密密钥的缺陷所在。为此,1976年,D瓶e和Hellman提出了一种全新密E和解密算法D必须满足以下三个条件:D(E(P))=P;从导出D非常困难;使用“选择明文”攻击不能攻破。研究者们努力寻找符合以上条件的算法,较好的策略是RSA算法,在此文中并不做理论上的推导,只说明如何使用这种算法:选择两个大素数(素数又称为质数)P和q;计算n=p*q和z=(p一1)丰(q一1);选择一个与z互质的数,令其为d;找到一个e,使满足e'd=1(mod收稿日期:2010—04—26作者简介:毛建儿(1973一),女,浙江宁波人,余姚四职校中学一级教师。主要从事程序设计方面研究。第9卷第2期2010年6月Vol-9No.2毛建儿:公开密钥算法RSA策略及程序实现FunctionPrimeNumbers()AsInteger产生50以内的素数集合及素数个数Dimi,j,k,nAsIntegerDimflagAsBooleann=0Fori=2To50ⅡiMod2◇0Thenflag=True:k=Int(Sqr(i))j=2Whilej<=kAndflagIfiModj:oThenflag=Falsej.j+lWendIfflagThenn=n+1:SuShu(n)=iEndIfNextPrimeNumbel隐=nEndFunction产生l一50以内的素数集合后,从中选择两个素数,这里设计两种产生方式:手工输入和自动产生。若手工输入,需检验素数是否正确,代码略;若自动产生,选择两个互不相同的素数。t=PrimeNumbers由自定义生成函数时,统计素数个数,以便确定素数选择的范围Randomize由素数集合.随机产生两个素数p=SuShu(1+Rnd宰(t-1))q=SuShu(1+Rnd木(t-1))从要求两个素数互不相同Whileq=pq=SuShu(1+Rnd木(t-1))Wend其次是选择一个与z互质的数d。对于小于50的两数p,q,可以直接计算n=p木q和z=(p--1)+(q-1)。现要求与Z互质,可以从素数集合中随机选择一个素数,检验其不整除z,则该数必与Z互质,即为所找d。t=PfimeNumbelsd=SuShu(1+Rnd(t—1))随机产生一个素数检验素数与z互质WllihzModd=0d=SuShu(1+Rnd(t-1))Wend再次是找到e,满足e'd=1(modz)。d已经产生,要找万方数据Jun.20lO满足条件的e,可以将数由小到大尝试的方法,以找到满足条件的最小e,用自定义函数SearchE实现。FunctionSearchE(ByValdAsInteger,ByValzAsInteger)AsIntegerDimeAsIntegere=l从l开始寻找满足条件的最小数eW11ile(d木e)ModZ<>1e=e+lWendSearchE=eEndFunction然后是计算C=M‘e(modn)中M^e部分。以上计算的参数有已经具备。对于输入的明文M需满足M<n(n=p*q),其对应密文的计算方法为:C=Me(modn),尽管在先前参数选择过程中p,q的数据范围都没有超出50,但由于d参数随机产生,加之z=(p-1)+(q-1)的数据也有些大,使得在找到符合e'd=1(modz)条件下的e数据也较大,因此计算过程中Me的结果很可能会出现数据溢出的情况,因此对于计算Me需采用高精度的幂运算实现,用自定义函数GJDChengFang实现,计算结果用字符串表示。FunctionGJDChengFang(ByValMAsInteger,ByValeAsInteger)AsString高精度幂运算产生结果为字符型Dima(1To1000),b(1TolOOO),C(1To40000)AsIntegerDims,strlAsStringDim11,12,i,J,k,X,W,eeAsIntegerstrl=Trim(Str(M))获取形如NAM运算的N部分(用字符表示)ll=Len(s仃1)获取底数长度12=e获取指数值分离底数的各数码,分别赋给a(),b()数组Fori=lTo11a(i)=Val(Mid(strl,ll+l-i,1))b(i):a(i)Nextee=ll相乘Fork=lTo12—1执行相乘运算次数Fori=lToee执行本次乘法运算时,将先前运算结果作为本次运算中的一个乘数,长度为eForj=1To11按位执行相乘运算X=a(i)%(j)本位相乘・37・第9卷第2期2010年6月V01.9No.2浙江工商职业技术学院学报w=i+j一1当前运算结果低位应属于的第几位C(w+1)=C(w+1)+(C(w)+X)\10高位操作C(w)=(C(w)+X)Mod10低位操作NextNext本次运算结果整理找到当前运算后非零高位的起始位ee=ee+llW1lileC(ee)=Oee=ee—lWend找到非零高位的起始位eFori-IToee若不是末次运算,按位依次将结果复制给数组a()Ifk<>12—1Thena(i)=C(i):C(i)---0清空数组c()的数据NextNext按位由高到低依次输出运算结果8----“”Fori=eeTolStep-1s=s+Trim(Str(C(i)))NextGJDChengFang。8EndFunction最后是计算C=M^e(modn)中(modn)部分。Me的结果已经出来,接下来要计算取余的操作,由于n是两个小于50的数的乘积。因此n无需将n各个数字分离。而被除数的数据可能会溢出,采用高精度方法表示,在计算取余的过程中,仍旧部分的采用了高精度的方法,一位一位剥离,直到得到最后的余数,这里也用一个自定义函数ModResult来实现。FuncdonModResuh(ByVal8AsString,ByValnllAsInteger)AsInteger产生mod操作的结果Dimsn,tAsStringDimleng,tn,i,jAsIntegersn=Trim(Str(nn)):leng=Len(sn)t=ledt(s,leng—1):tn=Val(t)i=lengWhilei<=Len(s)按位操作的次数tn--tn*10+Val(Mid(s,i,1))先前余数*10,加上本位上的数作为当前被除数tn--tnM0dnn得到本次操作的余数i:“lWend・38・万方数据Jun.2010ModResult=tn取余的结果EndFunction另外,这些算法在编程实现上,界面如下图所示,应添加相关控件,合理布局。根据先前已经写好的若干自定义函数。RSA的加密和解密操作就变得比较简单了。需要说明的是解密过程由于只知道公开密钥的(d,n),因此要先找到对应的e,组合成私人密钥(e,n),这里都可以套用自定义函数,显然加密和解密过程是互逆过程。计算上是反函数的关系。以加密代码为例。PrivateSubCmdRSMiaMi_Click()Dimp,q,11,z,d,e,t,M,CAsInteger获取参数p,qp=Val(TxtP.Text):q=Val(TxtQ.Text)计算n和zn=p幸q:筘(p-1)宰(q-1)获取明文。检验明文M=Val(’rxtM.Text)IfM>=nThenMsgBox“明文数据不符合要求!(要求<p奉q)”,vbExclamation,“.’’ExitSubEndIf找一个与z互质的dt=PrimeNumbemd_Sllshu(1+Rnd(t-1))W1IilezModd=0d=SuShu(1+Rnd(t-1))Wend找符合条件的e,e'd=1(modn)e=SearchE(d。z)计算出密文CfM^e(modn)C=ModResu]t(G叩ChengFang(M,e),n).IhC.Text=Trim(Sir(C))EndSub应该指出的是,RSA算法虽然安全方便,但运行速度很慢,因此其通常只用来进行用户认证、数字签名或发送一次性的秘密密钥,而数据加密仍使用秘密密钥算法。[责任编辑:熊荣生]

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务