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实现颜色rgb和hex相互转换的函数
Mar 19 Python
Python模拟登录验证码(代码简单)
Feb 06 Python
python爬取淘宝商品详情页数据
Feb 23 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
python3实现字符串操作的实例代码
Apr 16 Python
Python中Numpy ndarray的使用详解
May 24 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 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 cout<<的一点看法
2010/01/24 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
PHP实现简单的计算器
2020/08/28 PHP
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
python中的django是做什么的
2020/07/31 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
python归并排序算法过程实例讲解
2020/11/04 Python
python 操作excel表格的方法
2020/12/05 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
大学生求职简历的自我评价
2013/10/14 职场文书
一年级数学教学反思
2014/02/01 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
五年级下册复习计划
2015/01/19 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
聚会通知怎么写
2015/04/23 职场文书
三八妇女节主持词
2015/07/04 职场文书
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
详解Go语言中Get/Post请求测试
2022/06/01 Golang