使用python实现rsa算法代码


Posted in Python onFebruary 17, 2016

RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名。

维基百科给出的RSA算法简介如下:

假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:

随意选择两个大的质数p和q,p不等于q,计算N=pq。

根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)

选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)

用以下这个公式计算d:d × e ≡ 1 (mod (p-1)(q-1))

将p和q的记录销毁。

(N,e)是公钥,(N,d)是私钥。(N,d)是秘密的。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。

#!/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") 
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 "keys:", pub, pri 
print "message:", L 
print "encrypt:", C 
print "decrypt:", D 
keys: (3713, 11) (3713, 1631) 
message: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29] 
encrypt: [406, 3622, 3168, 134, 3532, 263, 1313, 2743, 2603, 1025] 
decrypt: [20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L]

以上所述是小编给大家介绍的使用python实现rsa算法代码,希望对大家有所帮助!

Python 相关文章推荐
python比较2个xml内容的方法
May 11 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
Python搜索引擎实现原理和方法
Nov 27 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
python定时按日期备份MySQL数据并压缩
Apr 19 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
Python调用Windows命令打印文件
Feb 07 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
Python ConfigParser模块的使用示例
Oct 12 Python
利用Python实现自动扫雷小脚本
Dec 17 Python
python实现代码审查自动回复消息
Feb 01 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 Python
Python的GUI框架PySide的安装配置教程
Feb 16 #Python
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 #Python
python实现红包裂变算法
Feb 16 #Python
轻松实现python搭建微信公众平台
Feb 16 #Python
十条建议帮你提高Python编程效率
Feb 16 #Python
bpython 功能强大的Python shell
Feb 16 #Python
深入解读Python解析XML的几种方式
Feb 16 #Python
You might like
一个程序下载的管理程序(一)
2006/10/09 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
php实现的漂亮分页方法
2014/04/17 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
PHP实现微信发红包程序
2015/08/24 PHP
深入理解PHP内核(一)
2015/11/10 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python面向对象类的继承实例详解
2018/06/27 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
学习python可以干什么
2019/02/26 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
中专生自我鉴定范文
2013/12/19 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
幼儿教师个人总结
2015/02/05 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书