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之编写类之二方法
Oct 11 Python
python简单实现计算过期时间的方法
Jun 09 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
python 获取等间隔的数组实例
Jul 04 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
通过python检测字符串的字母
Feb 18 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
Jun 03 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 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
BBS(php & mysql)完整版(三)
2006/10/09 PHP
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
JS分页效果示例
2013/10/11 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
Python实现按中文排序的方法示例
2018/04/25 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
英语自荐信范文
2013/12/11 职场文书
青年文明号事迹材料
2014/01/18 职场文书
小学生自我评价范文
2014/01/25 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
网络工程师职业规划
2014/02/10 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python