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实现优先级队列结构的方法详解
Jun 02 Python
Python入门_条件控制(详解)
May 16 Python
python实现随机梯度下降法
Mar 24 Python
python求最大值最小值方法总结
Jun 25 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
Django之全局使用request.user.username的实例详解
May 14 Python
python新手学习使用库
Jun 11 Python
django rest framework 过滤时间操作
Jul 12 Python
Python如何将字符串转换为日期
Jul 31 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 Python
Python之基础函数案例详解
Aug 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
用PHP实现小型站点广告管理
2006/10/09 PHP
mac下安装nginx和php
2013/11/04 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
JS Timing
2007/04/21 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
jquery等待效果示例
2014/05/01 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
详解Django框架中的视图级缓存
2015/07/23 Python
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
python中使用print输出中文的方法
2018/07/16 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
开放系统互连参考模型
2016/06/29 面试题
一套C#面试题
2013/10/09 面试题
爱我中华教学反思
2014/04/28 职场文书
优秀党务工作者事迹材料
2014/05/07 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技