资讯详情

Python实现RSA加密算法

基本思路在这里说一下:

设p、q为质数 n = p*q fn = (p-1)*(q-1) 要满足: 1 < e < fn , 且 e 与 fn 互质 满足: e*d%fn = 1 (d>1)  e 为公钥 , d 为私钥 把e 和 n 发给 客户端 m 为明文  c = m^e%n c 为密文 在把 c 发给服务器 m = c^d%n 最后得到 m 

RSA算法讲解 具体实现代码如下:

# coding=utf-8 import random  num_list = list()  def isPNs(x):     for j in range(2,x):         if (x % j == 0):             return False     return True  def isPN():     for i in range(3,10001):         if (isPNs(i)):             num_list.append(i)     print "10000以内质数运算(1/6)已完成"  def returnED(fn):     fnPn = list()     for i in range(2,fn/2):         if(fn%i==0):             fnPn.append(i)     fnPn.append(fn/2)     print "已完成fn所有因素运算(2/6)"     for i in range(fn - 1, 1, -1): ## 如果运行时间太长,你可以把它放在这里for i in range(fn-1,1,-1): 替换成 for i in range(1,fn):         flag = True         for j in range(len(fnPn)):             if(i%fnPn[j] == 0):                 flag = False                 break         if(flag):             print "e运算(3/6)已完成"             j = 1             while True:                 if(i*j%fn == 1):                     print "d运算(4/6)已完成"                     return i,j                 j  = 1  def disp():     isPN()     p = num_list[random.randint(0,(len(num_list))/2-1)]     q = num_list[random.randint(0,(len(num_list))/2-1)   len(num_list)/2]     n = p*q     fn = (p-1)*(q-1)     e,d = returnED(fn)     m = 3   # 明文     c = m**e%n # 密文     print "c运算(5/6)已完成"      m = c**d%n  # C解 明文     print "m运算(6/6)已完成"     print "p =",p,",q =",q,",n =",n,",fn =",fn,",e =",e,",d =",d,",c =",c,",m =",m  def main():     disp()  if __name__ == '__main__':     main()  

标签: 220fnpn晶体管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司