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编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
python实现爬山算法的思路详解
Apr 09 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
python多进程并行代码实例
Sep 30 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 Python
python爬虫快速响应服务器的做法
Nov 24 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 Python
用python自动生成日历
Apr 24 Python
如何在向量化NumPy数组上进行移动窗口
May 18 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
php判断ip黑名单程序代码实例
2014/02/24 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
Dojo 学习要点
2010/09/03 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Python 监测文件是否更新的方法
2019/06/10 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
骨干教师培训方案
2014/05/06 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
合作与交流自我评价
2015/03/09 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
2019银行竞聘书
2019/06/21 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
angular4实现带搜索的下拉框
2022/03/25 Javascript