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基础教程之数字处理(math)模块详解
Mar 25 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
python如何在终端里面显示一张图片
Aug 17 Python
python递归查询菜单并转换成json实例
Mar 27 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
Python使用pyyaml模块处理yaml数据
Apr 14 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 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
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
jquery无缝向上滚动实现代码
2013/03/29 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
python交互式图形编程实例(二)
2017/11/17 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
Python Pandas 如何shuffle(打乱)数据
2019/07/30 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
韩国11街:11STREET
2018/03/27 全球购物
自我鉴定怎么写
2013/12/05 职场文书
劳资协议书范本
2014/04/23 职场文书
班级读书活动总结
2014/06/30 职场文书
行政管理专业求职信
2014/07/06 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
班主任高考寄语
2015/02/26 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
oracle数据库去除重复数据
2022/05/20 Oracle