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计算对角线有理函数插值的方法
May 07 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
Python作用域用法实例详解
Mar 15 Python
浅谈Python 对象内存占用
Jul 15 Python
Python实现多并发访问网站功能示例
Jun 19 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
详解python3中zipfile模块用法
Jun 18 Python
解决Django中checkbox复选框的传值问题
Mar 31 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
Python函数调用追踪实现代码
Nov 27 Python
ASP.NET Core中的配置详解
Feb 05 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 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无限极分类实现的两种解决方法
2013/04/28 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
jQuery之排序组件的深入解析
2013/06/19 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
JS求平均值的小例子
2013/11/29 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
python实现大文本文件分割
2019/07/22 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
经贸日语专业个人求职信范文
2013/12/28 职场文书
竞职演讲稿范文
2014/01/11 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
教育实习指导教师评语
2014/12/31 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python