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基础教程之对象和类的实际运用
Aug 29 Python
python实现决策树
Dec 21 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
python 实现UTC时间加减的方法
Dec 31 Python
python中嵌套函数的实操步骤
Feb 27 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
python实现复制文件到指定目录
Oct 16 Python
python学生信息管理系统实现代码
Dec 17 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 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
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
JavaScript Prototype对象
2009/01/07 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
python实现发送邮件功能代码
2017/12/14 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
python构建基础的爬虫教学
2018/12/23 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
人事专员的岗位职责
2014/03/01 职场文书
2014年基层党组织公开承诺书
2014/03/29 职场文书
项目合作意向书模板
2014/07/29 职场文书
2014年女职工工作总结
2014/11/27 职场文书
培训简讯范文
2015/07/20 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
高二化学教学反思
2016/02/22 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
MySQL系列之十一 日志记录
2021/07/02 MySQL