Python实现的rsa加密算法详解


Posted in Python onJanuary 24, 2018

本文实例讲述了Python实现的rsa加密算法。分享给大家供大家参考,具体如下:

算法过程

1. 随意选择两个大的质数p和q,p不等于q,计算N=pq。
2. 根据欧拉函数,不大于N且与N互质的整数??数??p-1)(q-1)。
3. 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。
4. 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。
5. 将p和q的记录销毁。

(N,e)是公钥,(N,d)是私钥。

python代码

# -*- coding: utf-8 -*-
#!/usr/bin/env python
def range_prime(start, end):
 l = list()
 for i in range(start, end+1):
  flag = True
  for j in range(2, i):
   if i % j == 0:
    flag = False
    break
  if flag:
   l.append(i)
 return l
def generate_keys(p, q):
 #numbers = (11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47)
 numbers =range_prime(10, 100)
 N = p * q
 C = (p-1) * (q-1)
 e = 0
 for n in numbers:
  if n < C and C % n > 0:
   e = n
   break
 if e==0:
  raise StandardError("e not found") #Python3中改为BaseException
 d = 0
 for n in range(2, C):
  if(e * n) % C == 1:
   d = n
   break
 if d==0:
  raise StandardError("d not found")
 return ((N, e), (N, d))
def encrypt(m, key):
 C, x = key
 return (m ** x) % C
decrypt = encrypt
if __name__ == '__main__':
 pub, pri = generate_keys(47, 79)
 L = range(20, 30)
 C = map(lambda x: encrypt(x, pub), L)
 D = map(lambda x: decrypt(x, pri), C)
 print "三水点靠木测试结果:"
 print "keys:", pub, pri
 print "message:", L
 print "encrypt:", C
 print "decrypt:", D

运行结果:

Python实现的rsa加密算法详解

其实用什么语言实现这个过程都不是很麻烦,只是我们老师要求生成1024的随机数,用c语言写就有点恶心了,所以用python或者java实现要更加方便一点。

Python 相关文章推荐
跟老齐学Python之网站的结构
Oct 24 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
如何利用Fabric自动化你的任务
Oct 20 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
Python冲顶大会 快来答题!
Jan 17 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
python计算无向图节点度的实例代码
Nov 22 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 #Python
python做量化投资系列之比特币初始配置
Jan 23 #Python
python在非root权限下的安装方法
Jan 23 #Python
Python解析命令行读取参数--argparse模块使用方法
Jan 23 #Python
Python 查看文件的读写权限方法
Jan 23 #Python
Python3 中文文件读写方法
Jan 23 #Python
Python3之文件读写操作的实例讲解
Jan 23 #Python
You might like
php实现计数器方法小结
2015/01/05 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
python使用正则表达式提取网页URL的方法
2015/05/26 Python
Django如何自定义分页
2018/09/25 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
Java如何调用外部Exe程序
2015/07/04 面试题
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
项目经理岗位职责
2013/11/11 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书