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多线程实例教程
Sep 06 Python
Python3实现发送QQ邮件功能(文本)
Dec 15 Python
详解python运行三种方式
May 13 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
Python浮点数四舍五入问题的分析与解决方法
Nov 19 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 Python
Python基于numpy模块实现回归预测
May 14 Python
Django中和时区相关的安全问题详解
Oct 12 Python
python3实现飞机大战
Nov 29 Python
对象析构函数__del__在Python中何时使用
Mar 22 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
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
Python数据类型详解(二)列表
2016/05/08 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
python @classmethod 的使用场合详解
2019/08/23 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
用Python制作音乐海报
2021/01/26 Python
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
接口中的方法可以是abstract的吗
2015/07/23 面试题
后勤人员自我鉴定
2013/10/20 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
python简单验证码识别的实现过程
2021/06/20 Python