使用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实现哈希表
Feb 07 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
python读取二进制mnist实例详解
May 31 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
Django组件之cookie与session的使用方法
Jan 10 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
Feb 05 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
浅谈Django前端后端值传递问题
Jul 15 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 Python
python manim实现排序算法动画示例
Aug 14 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
农民C键的运用技巧
2020/03/04 星际争霸
简单易用的计数器(数据库)
2006/10/09 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
2011/01/11 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
js实现导航跟随效果
2018/11/17 Javascript
Windows下python2.7.8安装图文教程
2016/05/26 Python
利用python获取Ping结果示例代码
2017/07/06 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
django表单的Widgets使用详解
2019/07/22 Python
使用python实现飞机大战游戏
2020/03/23 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
serialVersionUID具有什么样的特征
2014/02/20 面试题
校园报刊亭的创业计划书
2014/01/02 职场文书
培训班主持词
2014/03/28 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
演讲稿:态度决定一切
2019/04/02 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL