python实现RSA加密(解密)算法


Posted in Python onFebruary 17, 2016

RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其密钥的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。

RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

python实现RSA加密(解密)算法

python实现RSA加密(解密)算法

核心代码:

# -*- encoding:gbk -*- import math,random#导入模块 def prime_num(max_num):#生成小于max_num的素数列表 prime_num=[] for i in xrange(2,max_num): temp=0 sqrt_max_num=int(math.sqrt(i))+1 for j in xrange(2,sqrt_max_num): if i%j==0: temp=j break if temp==0: prime_num.append(i) return prime_num def rsa_key():#生成密钥的函数 prime=prime_num(400)#小于400的素数列表 p=random.choice(prime[-50:-1])#从后50个素数中随机选择一个作为p q=random.choice(prime[-50:-1])#从后50个素数中随机选择一个作为q while(p==q):#如果p和q相等则重新选择 q=random.choice(prime[-50:-1]) N=p*q r=(p-1)*(q-1) r_prime=prime_num(r) e=random.choice(r_prime)#随机选一个素数 d=0 for n in xrange(2,r): if (e*n)%r==1: d=n break return ((N,e),(N,d)) def encrypt(pub_key,origal):#生成加密用的公钥 N,e=pub_key return (origal**e)%N def decrypt(pri_key,encry):#生成解密用的私钥 N,d=pri_key return (encry**d)%N

下面一段代码给大家介绍python_rsa加密解密

使用python进行rsa加密与加密,包括公钥加密私钥解密,私钥加密公钥解密。(需要安装M2Crypto库)。

代码:

#!/usr/bin/env python
#encoding=utf-8 
'''
测试rsa加密解密
'''
from M2Crypto import RSA 
msg = 'aaaa-aaaa'
rsa_pub = RSA.load_pub_key('rsa_pub.pem')
rsa_pri = RSA.load_key('rsa_pri.pem')
print '*************************************************************'
print '公钥加密,私钥解密'
ctxt = rsa_pub.public_encrypt(msg, RSA.pkcs1_padding)
ctxt64 = ctxt.encode('base64')
print ('密文:%s'% ctxt64)
rsa_pri = RSA.load_key('rsa_pri.pem')
txt = rsa_pri.private_decrypt(ctxt, RSA.pkcs1_padding)
print('明文:%s'% txt)
print '*************************************************************'
print '私钥加密,公钥解密'
ctxt_pri = rsa_pri.private_encrypt(msg, RSA.pkcs1_padding)
ctxt64_pri = ctxt.encode('base64')
print ('密文:%s'% ctxt64_pri)
txt_pri = rsa_pub.public_decrypt(ctxt_pri, RSA.pkcs1_padding)
print('明文:%s'% txt_pri)

库的安装说明

M2Crypto库的下载地址:

https://github.com/martinpaljak/M2Crypto

或者:https://pypi.python.org/pypi/M2Crypto

依赖的库:openssh-devel gcc swig (这3个库在centos上可以直接使用yum安装)

Python 相关文章推荐
python中精确输出JSON浮点数的方法
Apr 18 Python
python中redis的安装和使用
Dec 04 Python
Python 含参构造函数实例详解
May 25 Python
Python基础知识_浅谈用户交互
May 31 Python
Python中Threading用法详解
Dec 27 Python
python实现批量解析邮件并下载附件
Jun 19 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
Python Selenium模块安装使用教程详解
Jul 09 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
使用python实现rsa算法代码
Feb 17 #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
You might like
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
javascript 动态添加表格行
2006/06/22 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
javascript的几种写法总结
2016/09/30 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
不得不知的ES6小技巧
2018/07/28 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
python实现web方式logview的方法
2015/08/10 Python
python实现用户登录系统
2016/05/21 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python 提取文件指定列的方法示例
2019/08/07 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
简单的Python人脸识别系统
2020/07/14 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
药剂学专业应届生自荐信
2013/09/29 职场文书
物流专业大学生的自我鉴定
2013/11/13 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
土地转让协议书
2014/09/27 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
学习党史心得体会2016
2016/01/23 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers