使用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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
Python下的subprocess模块的入门指引
Apr 16 Python
python urllib urlopen()对象方法/代理的补充说明
Jun 29 Python
对pandas中to_dict的用法详解
Jun 05 Python
pandas Dataframe行列读取的实例
Jun 08 Python
python将list转为matrix的方法
Dec 12 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
Python几种常见算法汇总
Jun 02 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
python实现网络五子棋
Apr 11 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
php+oracle 分页类
2006/10/09 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
在Windows XP下安装Apache+MySQL+PHP环境
2015/02/22 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
python文件比较示例分享
2014/01/10 Python
对于Python深浅拷贝的理解
2019/07/29 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python数值基础知识浅析
2019/11/19 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
创业计划书——互联网商机
2014/01/12 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
《识字五》教学反思
2014/03/01 职场文书
销售求职信范文
2014/05/26 职场文书
婚庆答谢词
2015/01/04 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python