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中tell()方法的使用详解
May 24 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
Django中cookie的基本使用方法示例
Feb 03 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
重写django的model下的objects模型管理器方式
May 15 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
python二维图制作的实例代码
Dec 03 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 Python
python绘制云雨图raincloud plot
Aug 05 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
PHP的FTP学习(三)
2006/10/09 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
javascript生成大小写字母
2015/07/03 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
详解jQuery事件
2017/01/13 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
javascript中函数的写法实例代码详解
2018/10/28 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
python logging日志模块以及多进程日志详解
2018/04/18 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
python 实现汉诺塔游戏
2020/11/28 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
英国香水店:The Perfume Shop
2017/03/27 全球购物
学生自我鉴定模板
2013/12/30 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
送给客户微信问候语!
2019/07/04 职场文书
承诺书的签字人,需不需要承担相应的责任?
2019/07/09 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书