参考文章:
RSA的基本原理就不做赘述,详细的可以去查一查,主要介绍使用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
# coding=utf-8
import randomnum_list = list()#判断x是否为素数,是返回True
def isPNs(x):for j in range(2,x):if (x % j == 0):return Falsereturn True#将10000以内的素数,放进列表中
def isPN():for i in range(3,10001):if (isPNs(i)):num_list.append(i)print ("已完成10000以内质数运算(1/6)")def returnED(fn):fnPn = list()       #将fnPn的所有因子放入列表中for i in range(2,int(fn/2)+1):if(fn%i==0):fnPn.append(i)fnPn.append(fn/2)print ("已完成fn所有因子运算(2/6)",'leng=',len(fnPn))for i in range(random.randint(0,fn-1),1,-1):#for i in range(fn - 1, 1, -1): #此算法直接取离fn最近的互质的数作为eflag = True        #判断j和fn的所有质因子是否互质,否则标志为Falsefor j in range(len(fnPn)):if(i%fnPn[j] == 0):flag = Falsebreakif(flag):print ("已完成e运算(3/6), i=",i)j = 1while True:if(i*j%fn == 1):print ("已完成d运算(4/6), j=",j)return i,jj += 1def disp():isPN()num1 = len(num_list)/2-1p = num_list[random.randint(0,int((len(num_list))/2-1))]q = num_list[random.randint(0,int((len(num_list))/2-1)) + int(len(num_list)/2)]n = p*qfn = (p-1)*(q-1)e,d = returnED(fn)m = int(input('请输入你要加密传输的数字:'))   # 明文c = m**e%n # 密文,m的e次方幂print ("已完成c运算(5/6), c=",c) 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()

RSA算法原理
Python实现RSA加密算法

RSA算法的Python实现(模幂运算——原始算法)相关推荐

  1. C++modular exponentiation模幂运算的实现算法(附完整源码)

    C++modular exponentiation模幂运算的实现算法 C++modular exponentiation模幂运算的实现算法完整源码(定义,实现,main函数测试) C++modular ...

  2. 【密码学】C 语言实现 RSA 模幂运算

    RSA模幂运算 1. 实验内容 按照平方乘算法和模重复平方法,分别计算am mod n 2. RSA介绍 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi ...

  3. 模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)

    1.什么是模幂运算问题 给出a, k, mod 计算ak(%mod)a^k (\%mod)ak(%mod)的值 k是一个非常大的正整数(超过1e7) 附,一个可以提交的地方: leetcode 372 ...

  4. 如何高效进行模乘、模幂运算?——蒙哥马利算法(Montgomery Algorithm)从入门到精通

    蒙哥马利算法(Montgomery Algorithm)从入门到精通 ​ 加密算法中,模运算(包括模乘.模幂运算)是难以避免的,如何高效地进行模运算,是提高算法效率的一个关键. 直观的想法 ​ 在数学 ...

  5. Modular_exponentiation模幂运算

    https://en.wikipedia.org/wiki/Modular_exponentiation 蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,是RSA加密算法的核心 ...

  6. python pow函数——幂运算 快速幂算法实现思路

    说明 python 内置pow函数用于实现幂的运算,在这里我使用的是快速幂算法实现pow函数功能. 快速幂 快速幂算法本质上基于的是分治思想. 优点:其时间复杂度为 O (log₂N), 与暴力遍历时 ...

  7. 幂运算 数组_Super Pow:如何高效进行模幂运算

    点击上方蓝字设为星标 东哥带你搞定算法~ 今天来聊一道与数学运算有关的算法题目,LeetCode 372 题 Super Pow,让你进行巨大的幂运算,然后求余数. int superPow(int ...

  8. Python实现快速幂取余算法

    引子 今天无意中,看到了慧科教育科技集团有限公司-后厂理工学院 的AI相关学员招募信息,要求颇高,还要做编程自测题,并且达到60分才建议进行课程的学习.我忍不住发送了报名信息,得到了自测题.看到了如下 ...

  9. python汉诺塔算法解析,python实现的汉诺塔算法示例

    本文实例讲述了python实现的汉诺塔算法.分享给大家供大家参考,具体如下: 规则: 圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定 在小圆盘上不能放大圆盘 在三根柱子之间一次只能移动一个圆 ...

最新文章

  1. 保姆级教程:Spring Boot 单元测试
  2. 【Python基础】一文理解Python集合,17个方法全解,看完就够了
  3. Linux——入门基本命令
  4. 关于Spring容器管理Bean的过程以及加载模式
  5. 浅析Asp.net MVC 中Ajax的使用
  6. 日期格式化为yyyymmdd_Excel小技巧——如何将多行日期快速转换为数字文本
  7. js 计算对象数组中某个属性值重复出现的个数
  8. 删除行对MySQL序列有这么多影响?
  9. halcon中如何生成椭圆_Halcon拟合系列(2)直线/圆/椭圆/矩形拟合算子
  10. matlab仿真卫星导航接收机信号干扰,卫星导航软件接收机多采样率信号处理技术...
  11. [LeetCode] Binary Tree Level Order Traversal
  12. 交友盲盒小程序/全开源版云开发交友盲盒小程序源码
  13. 计算机硕士系统毕业论文答辩ppt,计算机硕士论文答辩ppt
  14. java面向对象 封装 继承 多态
  15. torch.distributed多卡/多GPU/分布式DPP(二)—torch.distributed.all_reduce(reduce_mean)barrier控制进程执行顺序seed随机种子
  16. 汽车智能化新赛道——CMS国标明年1月1日落地,供应链已提前布局
  17. Ubuntu添加和设置默认中文字体
  18. android手机应用程序开发,Android手机应用程序开发标准
  19. 腾讯地图api_腾讯位置服务JavaScript API GL正式版发布 免费向开发者开放
  20. SpringCloud无法获取Nacos中的配置文件信息

热门文章

  1. sql注入中的--+注释问题探索
  2. 7-2 后序+中序序列构造二叉树
  3. PLSQL developer下载、安装、详细教程
  4. 制作右下角箭头的.9图片
  5. 在wps中实现二级联动
  6. 2022-08-03 Flume
  7. 科学计算器按键功能汇总
  8. DSP28335:多功能复用引脚GPIO
  9. python静态代码检查
  10. windows常用脚本bat合集