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 21 Python
Python的collections模块中namedtuple结构使用示例
Jul 07 Python
对Python协程之异步同步的区别详解
Feb 19 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
实例详解Python模块decimal
Jun 26 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
解决Django no such table: django_session的问题
Apr 07 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
如何用python反转图片,视频
Apr 24 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 Python
浅析Django接口版本控制
Jun 26 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常用image图像函数集
2013/06/24 PHP
PHP中exec与system用法区别分析
2014/09/22 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
asp批量修改记录的代码
2008/06/25 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
Python with的用法
2014/08/22 Python
Python3使用requests发闪存的方法
2016/05/11 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
用 Python 制作地球仪的方法
2020/04/24 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
会展中心部门工作职责
2013/11/27 职场文书
电子商务个人自荐信
2013/12/12 职场文书
商业融资计划书
2014/04/29 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2015初中团委工作总结
2015/07/28 职场文书
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis