使用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 错误和异常小结
Oct 09 Python
用Python编程实现语音控制电脑
Apr 01 Python
python删除列表中重复记录的方法
Apr 28 Python
简单介绍Python中的try和finally和with方法
May 05 Python
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
Jun 11 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
python加载自定义词典实例
Dec 06 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
pytorch中[..., 0]的用法说明
May 20 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
ThinkPHP的Widget扩展实例
2014/06/19 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
python paramiko模块学习分享
2017/08/23 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
什么是python的列表推导式
2020/05/26 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
用python实现一个简单的验证码
2020/12/09 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
领导证婚人证婚词
2014/01/13 职场文书
安全教育月活动总结
2014/05/05 职场文书
服务承诺口号
2014/05/22 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
先进党支部申报材料
2014/12/24 职场文书
养成教育工作总结
2015/08/13 职场文书
python OpenCV学习笔记
2021/03/31 Python
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android