使用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的Django框架加载模版的方式
Jul 20 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
浅谈Python __init__.py的作用
Oct 28 Python
如何用Django处理gzip数据流
Jan 29 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数组应用之比较两个时间的相减排序
2008/08/18 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
小程序实现多列选择器
2019/02/15 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python3字符串操作总结
2019/07/24 Python
学习和使用python的13个理由
2019/07/30 Python
Python如何读写字节数据
2020/08/05 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
最新大学职业规划书范文
2013/12/30 职场文书
四年大学自我鉴定
2014/02/17 职场文书
教师党员一句话承诺
2014/03/28 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
学校运动会报道稿
2014/09/23 职场文书
2015年教研组工作总结
2015/05/04 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript