#coding=utf-8fromrandomimportrandintimportgmpy2defoddR(r):whiler%2==0:r=r//2returnrdefbits(b):k=[]whileb:ifb%2!=0:k.append(1)else:k.append(0)b>>=1k.reverse()returnkdefquickmod(a,b,n):#a^b mod n 快速幂模n运算f=1k=bits(b)foriinrange(len(k)):f=(f*f)%nifk[i]:f=(f*a)%nreturnfdefgcd(m,n):while(n!=0):m,n=n,m%nreturnmdeffunc(e_d,N):k=e_d-1r=oddR(k)#求出k=2^t*r中的rwhileTrue:b=randint(2,N-1)#获取区间(2,N-1)的一个随机数a=quickmod(b,r,N)ifa==1:continuey=gcd(a-1,N)ifa>1andy>1:q=N//yreturnqelse:r=r*2defdeciphering(e_d,n):、p=func(e_d,n)q=n//pphi=n-(p+q)+1ifp*q==n:printpprintqelse:print"error"n=20714298338160449749545360743688018842877274054540852096459485283936802341271363766157976112525034004319938054034934880860956966585051684483662535780621673316774842614701726445870630109196016676725183412879870463432277629916669130494040403733295593655306104176367902352484367520262917943100467697540593925707162162616635533550262718808746254599456286578409187895171015796991910123804529825519519278388910483133813330902530160448972926096083990208243274548561238253002789474920730760001104048093295680593033327818821255300893423412192265814418546134015557579236219461780344469127987669565138930308525189944897421753947e_d=100772079222298134586116156850742817855408127716962891929259868746672572602333918958075582671752493618259518286336122772703330183037221105058298653490794337885098499073583821832532798309513538383175233429533467348390389323225198805294950484802068148590902907221150968539067980432831310376368202773212266320112670699737501054831646286585142281419237572222713975646843555024731855688573834108711874406149540078253774349708158063055754932812675786123700768288048445326199880983717504538825498103789304873682191053050366806825802602658674268440844577955499368404019114913934477160428428662847012289516655310680119638600315228284298935201deciphering(e_d,n)