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 相关文章推荐
动态创建类实例代码
Oct 07 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
Python 40行代码实现人脸识别功能
Apr 02 Python
python代码过长的换行方法
Jul 19 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
python学生信息管理系统实现代码
Dec 17 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
Jun 22 Python
python算的上脚本语言吗
Jun 22 Python
python+django+selenium搭建简易自动化测试
Aug 19 Python
Django nginx配置实现过程详解
Sep 10 Python
python 实现端口扫描工具
Dec 18 Python
Python3.10的一些新特性原理分析
Sep 15 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
php注销代码(session注销)
2012/05/31 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
一个对于Array的简单扩展
2006/10/03 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
python简易远程控制单线程版
2018/06/20 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
python实现学生管理系统开发
2020/07/24 Python
测试驱动开发的主要步骤是什么
2014/12/10 面试题
幼儿园大班教学反思
2014/02/10 职场文书
开工仪式主持词
2014/03/20 职场文书
黄石寨导游词
2015/02/05 职场文书
答谢酒会主持词
2015/07/02 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
Vue+Flask实现图片传输功能
2022/04/01 Vue.js
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python