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获得文件创建时间和修改时间的方法
Jun 30 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
Python如何快速实现分布式任务
Jul 06 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
Python JSON格式数据的提取和保存的实现
Mar 22 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
Selenium 安装和简单使用的实现
Dec 04 Python
Python使用Turtle模块绘制国旗的方法示例
Feb 28 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新手上路(五)
2006/10/09 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
javascript中this的四种用法
2015/05/11 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
Python MD5加密实例详解
2017/08/02 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
pycharm创建一个python包方法图解
2019/04/10 Python
python语言元素知识点详解
2019/05/15 Python
python如何实现异步调用函数执行
2019/07/08 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
应届毕业生如何写求职信
2014/02/16 职场文书
食品安全责任书
2014/04/15 职场文书
婚前保证书
2014/04/29 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
公司承诺书怎么写
2014/05/24 职场文书
大专毕业生求职信
2014/07/05 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
房产公证书样本
2015/01/23 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
Python中的套接字编程是什么?
2021/06/21 Python
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript
Java版 简易五子棋小游戏
2022/05/04 Java/Android