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脚本实现集群检测和管理功能
Mar 06 Python
Python入门_条件控制(详解)
May 16 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
python中reader的next用法
Jul 24 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
PyQt5中QSpinBox计数器的实现
Jan 18 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 裁剪图片成固定大小代码方法
2009/09/09 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
Python标准库与第三方库详解
2014/07/22 Python
python使用pil生成缩略图的方法
2015/03/26 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
Python语言进阶知识点总结
2019/05/28 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
解决python 文本过滤和清理问题
2019/08/28 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
python numpy数组复制使用实例解析
2020/01/10 Python
numba提升python运行速度的实例方法
2021/01/25 Python
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
Servlet方面面试题
2016/09/28 面试题
怎样写好自我鉴定
2013/12/04 职场文书
大学生个人自荐信
2014/02/24 职场文书
学习两会精神心得范文
2014/03/17 职场文书
2014年母亲节寄语
2014/05/07 职场文书
厂区绿化方案
2014/05/08 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
环卫工作汇报材料
2014/10/28 职场文书
自荐信模板大全
2015/03/27 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
python游戏开发Pygame框架
2022/04/22 Python
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技