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解析树及树的遍历
Feb 03 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
python 判断网络连通的实现方法
Apr 22 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
Sep 26 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
django 取消csrf限制的实例
Mar 13 Python
Python内存映射文件读写方式
Apr 24 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP中for循环语句的几种变型
2006/11/26 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
extjs 为某个事件设置拦截器
2010/01/15 Javascript
javascript之AJAX框架使用说明
2010/04/24 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Mac 上切换Python多版本
2017/06/17 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Django缓存系统实现过程解析
2019/08/02 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
仓管员岗位职责范文
2013/11/08 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
《钱学森》听课反思
2014/03/01 职场文书
药剂专业求职信
2014/06/20 职场文书
幼儿园见习报告
2014/10/30 职场文书