python实现AES和RSA加解密的方法


Posted in Python onMarch 28, 2019

本文实例为大家分享了python实现AES和RSA加解密的具体代码,供大家参考,具体内容如下

AES

AES 是一种对称加密算法,用key对一段text加密,则用同一个key对密文解密,

from Crypto import Random
from Crypto.Hash import SHA
from Crypto.Cipher import AES
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
from Crypto.PublicKey import RSA
import base64


# 秘钥
key = 'chenqichenqi1234'

# 明文
raw = 'sina company11111111111111111111'

# 加密
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
data = iv + cipher.encrypt(raw)


# 解密
iv = data[:16]
cipher = AES.new(key, AES.MODE_CFB, iv)
print cipher.decrypt(data[16:])

RSA

RSA是一种公钥密码算法,RSA的密文是对代码明文的数字的 E 次方求mod N 的结果。也就是将明文和自己做E次乘法,然后再将其结果除以 N 求余数,余数就是密文。RSA是一个简洁的加密算法。E 和 N 的组合就是公钥(public key)。

对于RSA的解密,即密文的数字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再对结果除以 N 求余数即可得到明文。D 和 N 的组合就是私钥(private key)。

# 伪随机数生成器
random_generator = Random.new().read

# rsa算法生成实例
rsa = RSA.generate(1024, random_generator)

# 秘钥对的生成
private_pem = rsa.exportKey()
public_pem = rsa.publickey().exportKey()
message = "chenqi"

# 公钥加密
rsakey = RSA.importKey(public_pem)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
cipher_text = base64.b64encode(cipher.encrypt(message))
print cipher_text


# 私钥解密
rsakey = RSA.importKey(private_pem)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
text = cipher.decrypt(base64.b64decode(cipher_text), random_generator)
print text

如上,RSA算法可以实现公钥加密、私钥解密。

在C/S架构的通信中,如果Client要向Server发送一段消息:

0、Server事先生成秘钥对;

1、Client请求Server的公钥;

2、Client用公钥加密mesage,并将密文发给Server;

3、Server用私钥解密,获取明文;

如果Server要向Client发送消息,流程也是类似的。

这个例子还有个问题,Server的公钥是公开的,任何人都可以得到。Server只能保证只有自己的私钥可以解密消息,但不能识别消息的来源是不是可靠,因为任何人都可能用公钥加密一段文本发给Server,这里就涉及到数字签名。

Clinet也可以生成自己的秘钥对,请求Server时把自己的公钥带过去

0、Server事先生成秘钥对、Client也事先生成秘钥对;

1、Client请求Server的公钥;

2、Client用Server的公钥加密mesage,并将密文发给Server,随请求一起发送一个签名(Clinet用私钥加密一个签名,并同时附带上自己的公钥);

3、Server用Clinet的公钥解密出签名,并核对;

4、Server用私钥解密,获取明文;

小结

加密主要用对方的公钥,解密用自己的私钥。签名用自己的私钥,验签用对方的公钥。

加密解密:公钥加密,私钥解密

签名验签:私钥签名,公钥验签

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用全局日志时需要注意的问题
May 06 Python
python+pyqt实现右下角弹出框
Oct 26 Python
Python使用matplotlib绘制余弦的散点图示例
Mar 14 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
对python 自定义协议的方法详解
Feb 13 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Python常用断言函数实例汇总
Nov 30 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 Python
python简单实现AES加密和解密
Mar 28 #Python
Python中dict和set的用法讲解
Mar 28 #Python
python3.x实现base64加密和解密
Mar 28 #Python
python实现AES加密解密
Mar 28 #Python
详解python tkinter教程-事件绑定
Mar 28 #Python
Python中捕获键盘的方式详解
Mar 28 #Python
python sort、sort_index方法代码实例
Mar 28 #Python
You might like
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
slice函数的用法 之不错的应用
2006/12/29 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
Python编程实现蚁群算法详解
2017/11/13 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
详解Python IO编程
2020/07/24 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
40岁生日感言
2014/02/15 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
交通事故委托书范本
2014/09/28 职场文书
债务授权委托书范本
2014/10/17 职场文书
旷课检讨书范文
2015/01/27 职场文书
小孩不笨观后感
2015/06/03 职场文书
实习证明格式范文
2015/06/16 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python