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 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
Python入门篇之条件、循环
Oct 17 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
Python性能提升之延迟初始化
Dec 04 Python
python中关于for循环的碎碎念
Jun 30 Python
Python模块文件结构代码详解
Feb 03 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
Python函数中不定长参数的写法
Feb 13 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
Pytorch环境搭建与基本语法
Jun 03 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
php curl的深入解析
2013/06/02 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
分享php多功能图片处理类
2016/05/15 PHP
php通过各种函数判断0和空
2020/07/04 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
自己的js工具 Cookie 封装
2009/08/21 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
jQuery的学习步骤
2011/02/23 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
Python算法应用实战之栈详解
2017/02/04 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
对于Python深浅拷贝的理解
2019/07/29 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
python 检测图片是否有马赛克
2020/12/01 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
电子商务专业个人的自我评价分享
2013/10/29 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
个人售房合同协议书
2016/03/21 职场文书