使用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实现批量修改文件名代码
Sep 10 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
Python numpy实现二维数组和一维数组拼接的方法
Jun 05 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
Nov 26 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
Django更新models数据库结构步骤
Apr 01 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
Python内存泄漏和内存溢出的解决方案
Sep 26 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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+dbfile开发小型留言本
2006/10/09 PHP
php5.2.0内存管理改进
2007/01/22 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
PHP导入导出Excel代码
2015/07/07 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
python实现人人网登录示例分享
2014/01/19 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
Python 复平面绘图实例
2019/11/21 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
.NET方向面试题
2014/11/20 面试题
应届生求职推荐信
2013/10/28 职场文书
公司总经理岗位职责
2014/03/15 职场文书
产品调价通知函
2015/04/20 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
Go归并排序算法的实现方法
2022/04/06 Golang