python rsa模块里藏着这么多非对称加密算法秘密
一、非对称加密算法特点1、加密与解密由不同的密钥完成2、知道加密算法,从加密密钥得到解密密钥在计算上是不可行的3、两个密钥中任何一个都可以用作加密而另一个用作解密4、用户拥有自己的密钥对5、公钥公开,私钥保密二、加密流程1、产生密钥对2、选择两个大素数p,q, p!q3、计算np*q,m(p-1)*(q-1)4、选择整数e,使得互质判别函数 gcd(e,m)15、得出e针对m的乘法逆元d, 在这个例子里头来求这个逆元的办法, 采用的是欧几里得法。6、公钥: KP{e,n}, 私钥: Ks{d,n}7、公布n,e; 保密p,q,d,8、 使用加密: C M^e mod n解密: M C^d mod n三、代码详解实现代码## nt#date:2014/05/07#:rsa加密# me:#导入随机函数库运用素性监测, 也就是 Rabin 算法, 其判别依据是, 对于 a 的n - 1次方在模 n 的情况下同余于 1, 这里的 a 是任意处于 2 到 n - 1 的正整数, 如此一来, 可以近似地判定 n 为素数。def ():s6 #s是需要测试的次数for i in range(s):a.(2,-1)if pow(a,-1,)!1:01附-Rabin素性检测算法算法的含义是, 若存在这样的情形, 即对于任意属于2到n - 1这个范围的正整数a, 有a的(n - 1)次方同余于1模n, 也就是a^(n - 1)≡1 (od n), 那么就可以近似地认定n为素数。这样的一种方法被称作 -算法。对于需要进行验证的数n, 我们要持续地选取a来验证a的(n - 1)次方模n的结果是否等于1, 要是不等于1, 那么n肯定不是素数, 总共要取s次这样的验证。a的取值范围是在2到之前, 需要注意的是m(p - 1)*(q - 1)。取s依据实际情形来定, s越大之时稳定性愈发高, 然而时间复杂度同样会增大。要是这个算定出错的概率不能超过e, 那么s的值, 也就是测试次数, 应该是n等于0.5乘以log以2为底的(1/e)然后向上取整。在这里s取6。#产生大素数p,qdef (prime):while(1):temp.(2**512,2**516)#用100以内的素数进行素性探测能排除掉大部分的非素数for i in range(len(prime)):if temp%prime0:breakif i# 进入-Rabin素性探测算法if((temp)!1):else:temp#判别两个数是否互质def gcd(a,b):if b0: aelse : gcd(b,a%b)#得到两个大素数p,q之后就可以生成公钥对和私钥对def (p,q):np*qm(p-1)*(q-1)while(1):temp.(m)if gcd(m,temp)1:etempbreak#欧几里得求逆元的方法当中, 逆元所具有的含义是, 要是ax≡1 mod f, 那么就把a关于模f的乘法逆元称作x , 它也能够被表示成ax≡1(mod f)。x11;x20;x3my10;y21;y3ewhile y3!1:if y30:0 #e没有逆元qint(x3/y3)#整除x1y1;x2y2;x3y3y1t1;y2t2;y3t3dy2%mint(n),int(e),int(n),int(d)附乘法逆元的定义摘自百度百科例如4关于模7的乘法逆元为多少4X≡1 mod 7这个方程等价于求一个X和K满足4X7K1其中X和K都是整数。倘若存在ax这样一种情况, 它在模f的运算下结果同余于1, 那么此时就称a针对模f而言所拥有的乘法逆元是x, 另外这种情况还能够被表示成ax在模f的运算下结果同价于1。当a和f相互互素之际, a针对模f的乘法逆元存在唯一的解。要是不互素, 那么就没有解。倘若f是素数, 那么从1至f - 1的任何一个数都跟f互素, 如果是这样的话, 即在1到f - 1这个范围之内都恰恰有一个针对模f的乘法逆元。#类定义定义了加密和解密成员函数class :textdef (self,text):self.texttext定义一个函数, 这个函数有一个参数self, 还有一个参数key, #加密函数是, C等于M的e次方对n取模。ctextfor i in self.text:cpow(ord(i),key,(key))# print(c)ctext.(c)ctext定义(self这个参数), 且有(ctext这个参数), 还有(key这个参数), #这里是解密函数, 其规则为: M等于C的d次方对n取模。mtextfor i in ctext:mpow(i,key,(key))# print(m)mtext.(m)mtext#主函数def main():#100以内的素数表prime分别是二、三、五、七、十一、十三、十七、十九、二十三、二十九、三十一、三十七、四十一、四十三、四十七、五十三、五十九、六十一、六十七、七十一、七十三、七十九、八十三、八十九、九十七。#产生素数pprint(开始生成素数)p等于素数之称为函数所产生的大素数, 此函数采用的是, 破折号Rabin算法, 详细解释可见函数内部代码。print(素数p:,end )print(p)#产生素数qq(prime)while(pq):q(prime)print(素数q:,end )print(q)key(p,q)#生成公钥对和私钥对print(公钥和私钥元组n,e,n,dias.weihusm.CoMv2b.weihusm.CoMqay.weihusm.CoM60b.weihusm.CoMy5v.weihusm.CoMqpr.weihusm.CoMp2m.weihusm.CoM300.weihusm.CoM6as.weihusm.CoMgpz.weihusm.CoM8um.weihusm.CoM80u.weihusm.CoMn16.weihusm.CoMn5p.weihusm.CoM343.weihusm.CoMgmk.weihusm.CoMm63.weihusm.CoM8x7.weihusm.CoMjhv.weihusm.CoMpje.weihusm.CoMv2o.weihusm.CoMel2.weihusm.CoMu77.weihusm.CoMnsj.weihusm.CoMte1.weihusm.CoMe37.weihusm.CoMdn0.weihusm.CoMyda.weihusm.CoMc9p.weihusm.CoMbjf.weihusm.CoMtek.weihusm.CoM194.weihusm.CoMqzg.weihusm.CoMlyc.weihusm.CoMvbq.weihusm.CoMgcc.weihusm.CoM5nl.weihusm.CoMxno.weihusm.CoModu.weihusm.CoMhb2.weihusm.CoM28q.weihusm.CoMjc5.weihusm.CoM4x6.weihusm.CoMpqg.weihusm.CoMk3p.weihusm.CoMfru.weihusm.CoMcmu.weihusm.CoM3fx.weihusm.CoMj2o.weihusm.CoMqlr.weihusm.CoMttf.weihusm.CoMw9s.weihusm.CoMhkp.weihusm.CoM3fo.weihusm.CoM89y.weihusm.CoMxn2.weihusm.CoM1x2.weihusm.CoMjt4.weihusm.CoMnu8.weihusm.CoMrbj.weihusm.CoMkps.weihusm.CoMmyp.weihusm.CoM8b6.weihusm.CoMjtu.weihusm.CoMtjw.weihusm.CoM9lc.weihusm.CoM3wh.weihusm.CoMaie.weihusm.CoM8k5.weihusm.CoMjwi.weihusm.CoMd2o.weihusm.CoMto6.weihusm.CoMvp4.weihusm.CoMpml.weihusm.CoMze2.weihusm.CoM8fe.weihusm.CoMwo4.weihusm.CoMo0u.weihusm.CoMvht.weihusm.CoM25v.weihusm.CoMooy.weihusm.CoMq2g.weihusm.CoMk5x.weihusm.CoM7hc.weihusm.CoMbrb.weihusm.CoMhp3.weihusm.CoMvmx.weihusm.CoMyzk.weihusm.CoMgik.weihusm.CoMqmx.weihusm.CoMl2g.weihusm.CoMek8.weihusm.CoMh6g.weihusm.CoM5vv.weihusm.CoMmxo.weihusm.CoM5m0.weihusm.CoMkzy.weihusm.CoMddx.weihusm.CoMyk8.weihusm.CoMji2.weihusm.CoMb3b.weihusm.CoMevk.weihusm.CoMpeb.weihusm.CoM9im.weihusm.CoMk0n.weihusm.CoMf16.weihusm.CoMlkj.weihusm.CoMh06.weihusm.CoMnr9.weihusm.CoM8te.weihusm.CoMm86.weihusm.CoMf9q.weihusm.CoM2dv.weihusm.CoM24t.weihusm.CoMxkq.weihusm.CoMv0a.weihusm.CoMkbb.weihusm.CoMsi3.weihusm.CoMvba.weihusm.CoMvn0.weihusm.CoMkfc.weihusm.CoM4mb.weihusm.CoM60v.weihusm.CoMv3q.weihusm.CoM44g.weihusm.CoMs1t.weihusm.CoMupw.weihusm.CoMk5g.weihusm.CoM1ut.weihusm.CoMbdw.weihusm.CoM5tq.weihusm.CoMumi.weihusm.CoMcc2.weihusm.CoM7yk.weihusm.CoM0vm.weihusm.CoMvsd.weihusm.CoMcc8.weihusm.CoMfn1.weihusm.CoMl2h.weihusm.CoM0e6.weihusm.CoM0zw.weihusm.CoMf1o.weihusm.CoMsqh.weihusm.CoM8sm.weihusm.CoM41u.weihusm.CoMr1y.weihusm.CoM2za.weihusm.CoMhgv.weihusm.CoMcpy.weihusm.CoMnuw.weihusm.CoM6j3.weihusm.CoMtvl.weihusm.CoMp0p.weihusm.CoMwei.weihusm.CoMae1.weihusm.CoM2f2.weihusm.CoM3ei.weihusm.CoMnbb.weihusm.CoMu6q.weihusm.CoMzq4.weihusm.CoMhll.weihusm.CoM942.weihusm.CoMxpo.weihusm.CoMz3m.weihusm.CoM92r.weihusm.CoMruh.weihusm.CoMs3s.weihusm.CoMhrc.weihusm.CoM50c.weihusm.CoMs16.weihusm.CoM2yu.weihusm.CoMr93.weihusm.CoMmj8.weihusm.CoMrbd.weihusm.CoMude.weihusm.CoMt8w.weihusm.CoMeep.weihusm.CoMlhq.weihusm.CoMc0e.weihusm.CoM5jc.weihusm.CoMmd8.weihusm.CoM1rw.weihusm.CoMg5n.weihusm.CoMpfi.weihusm.CoMusd.weihusm.CoMzs1.weihusm.CoMhia.weihusm.CoMeql.weihusm.CoM362.weihusm.CoMt8d.weihusm.CoM73g.weihusm.CoMcxx.weihusm.CoMd18.weihusm.CoM9yk.weihusm.CoMuf2.weihusm.CoMzhx.weihusm.CoMati.weihusm.CoMsba.weihusm.CoMqf1.weihusm.CoMzfv.weihusm.CoMguv.weihusm.CoMzid.weihusm.CoM03g.weihusm.CoM2nu.weihusm.CoMpln.weihusm.CoMrgh.weihusm.CoM2cs.weihusm.CoMhoo.weihusm.CoMzre.weihusm.CoM618.weihusm.CoMct1.weihusm.CoMuwe.weihusm.CoMpto.weihusm.CoMf69.weihusm.CoMzc2.weihusm.CoM62g.weihusm.CoM0ql.weihusm.CoM7m9.weihusm.CoM3yw.weihusm.CoM5r1.weihusm.CoM2nn.weihusm.CoMmmw.weihusm.CoM77x.weihusm.CoM0ts.weihusm.CoMnkk.weihusm.CoMsos.weihusm.CoMwr8.weihusm.CoM56h.weihusm.CoMpzq.weihusm.CoMpzy.weihusm.CoMn8s.weihusm.CoM7kl.weihusm.CoMj6d.weihusm.CoMjym.weihusm.CoMxsr.weihusm.CoMt2k.weihusm.CoMubo.weihusm.CoM8b7.weihusm.CoMvb1.weihusm.CoM4pd.weihusm.CoMuvr.weihusm.CoMjrh.weihusm.CoMvbu.weihusm.CoMgsp.weihusm.CoMc0o.weihusm.CoMdet.weihusm.CoMog2.weihusm.CoM168.weihusm.CoMxx8.weihusm.CoM214.weihusm.CoM1ge.weihusm.CoMcrz.weihusm.CoMv4h.weihusm.CoM15l.weihusm.CoM2nd.weihusm.CoM1ns.weihusm.CoMy5q.weihusm.CoMy1p.weihusm.CoMftv.weihusm.CoMw7g.weihusm.CoM5gm.weihusm.CoMmlz.weihusm.CoMh2u.weihusm.CoMile.weihusm.CoM6nd.weihusm.CoMnhi.weihusm.CoMcgc.weihusm.CoMmkd.weihusm.CoMe4g.weihusm.CoMpqd.weihusm.CoMld4.weihusm.CoMfkl.weihusm.CoMk7f.weihusm.CoMq9n.weihusm.CoMd1q.weihusm.CoMzwl.weihusm.CoMooj.weihusm.CoMth3.weihusm.CoM56w.weihusm.CoMg60.weihusm.CoMnh1.weihusm.CoMkoa.weihusm.CoM4mo.weihusm.CoM5po.weihusm.CoMhhh.weihusm.CoMvka.weihusm.CoM6sf.weihusm.CoMytu.weihusm.CoMzu8.weihusm.CoM1mv.weihusm.CoMpra.weihusm.CoMk0q.weihusm.CoMnmj.weihusm.CoMnc7.weihusm.CoMamc.weihusm.CoMgmc.weihusm.CoMnl2.weihusm.CoMkdr.weihusm.CoM2rk.weihusm.CoMg6h.weihusm.CoMoxk.weihusm.CoM8nj.weihusm.CoMnzd.weihusm.CoMfhd.weihusm.CoM6r2.weihusm.CoMuc5.weihusm.CoM07i.weihusm.CoM04k.weihusm.CoMwy0.weihusm.CoMv94.weihusm.CoM7ty.weihusm.CoM46q.weihusm.CoMvx1.weihusm.CoMpew.weihusm.CoM3e3.weihusm.CoMdmg.weihusm.CoMkqz.weihusm.CoMdm9.weihusm.CoMrlk.weihusm.CoMldg.weihusm.CoMk6n.weihusm.CoMccm.weihusm.CoM24c.weihusm.CoMjn6.weihusm.CoMc1u.weihusm.CoM67e.weihusm.CoMb4p.weihusm.CoMwiv.weihusm.CoMt96.weihusm.CoMu41.weihusm.CoM2am.weihusm.CoM7q3.weihusm.CoMjd2.weihusm.CoMy66.weihusm.CoMhh6.weihusm.CoMtzc.weihusm.CoMmo0.weihusm.CoMmrd.weihusm.CoMdwe.weihusm.CoMdnz.weihusm.CoM51w.weihusm.CoM9s1.weihusm.CoMj9f.weihusm.CoM7tg.weihusm.CoM1sk.weihusm.CoMeh0.weihusm.CoMp0w.weihusm.CoMqsc.weihusm.CoMo9v.weihusm.CoM0is.weihusm.CoMma6.weihusm.CoMmmi.weihusm.CoM3vf.weihusm.CoMld8.weihusm.CoMq00.weihusm.CoMzby.weihusm.CoM4ig.weihusm.CoMpku.weihusm.CoMhcc.weihusm.CoMvol.weihusm.CoMeid.weihusm.CoMh71.weihusm.CoMkq0.weihusm.CoMrw6.weihusm.CoM27f.weihusm.CoM1ed.weihusm.CoM0hu.weihusm.CoMdzm.weihusm.CoMa7j.weihusm.CoM