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里disconnect UDP套接字的方法
Apr 23 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
Python输入二维数组方法
Apr 13 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
python tkinter canvas使用实例
Nov 04 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
Pillow图像处理库安装及使用
Apr 12 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代码包装修正版
2008/03/15 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
2018/10/09 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
玩转python爬虫之URLError异常处理
2016/02/17 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
Brasty罗马尼亚:购买手表、香水、化妆品、珠宝
2020/04/21 全球购物
接口中的方法可以是abstract的吗
2015/07/23 面试题
大学本科毕业生的自我鉴定
2013/11/26 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
我的求职择业计划书
2014/04/04 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
父亲节活动总结
2015/02/12 职场文书
教师学期末个人总结
2015/02/13 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书