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 17 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
教你一步步利用python实现贪吃蛇游戏
Jun 27 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
python3字符串输出常见面试题总结
Dec 01 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新浪微博登录接口用法实例
2014/12/23 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
详解js类型判断
2018/05/22 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
django的csrf实现过程详解
2019/07/26 Python
Python类及获取对象属性方法解析
2020/06/15 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
战友聚会邀请函
2014/01/18 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书