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 30 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
详解Django中的权限和组以及消息
Jul 23 Python
Python图像灰度变换及图像数组操作
Jan 27 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
python入门教程之识别验证码
Mar 04 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
python3之模块psutil系统性能信息使用
May 30 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
Python ckeditor富文本编辑器代码实例解析
Jun 22 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
js常用代码段整理
2011/11/30 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
python 实现性别识别
2020/11/21 Python
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
毕业求职自荐信格式是什么
2013/11/19 职场文书
销售实习自我鉴定
2013/12/07 职场文书
期终自我鉴定
2014/02/17 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
七年级生物教学反思
2016/02/20 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python