使用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的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
Python虚拟环境项目实例
Nov 20 Python
Python时间戳使用和相互转换详解
Dec 11 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
python程序 创建多线程过程详解
Sep 23 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
Django视图扩展类知识点详解
Oct 25 Python
python time()的实例用法
Nov 03 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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学习笔记汇总
2014/10/05 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
js数组去重的方法总结
2019/01/18 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Django 用户认证组件使用详解
2019/07/23 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
百度JavaScript笔试题
2015/01/15 面试题
创业计划书如何编写
2014/02/06 职场文书
夜不归宿检讨书
2014/02/25 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
投诉信格式范文
2015/07/02 职场文书
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android