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 相关文章推荐
Django 前后台的数据传递的方法
Aug 08 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
Python3 shelve对象持久存储原理详解
Mar 23 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 Python
Pytest中skip skipif跳过用例详解
Jun 30 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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
mysql 搜索之简单应用
2007/04/27 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
33种Javascript 表格排序控件收集
2009/12/03 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
python基础教程之缩进介绍
2014/08/29 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
python中pow函数用法及功能说明
2020/12/04 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
自我评价怎么写正确呢?
2013/12/02 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
我爱我校演讲稿
2014/05/21 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
党员干部学习心得体会
2016/01/23 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android