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 01 Python
Python中字典(dict)合并的四种方法总结
Aug 10 Python
Python实现识别手写数字大纲
Jan 29 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
python批量修改文件编码格式的方法
May 31 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
python学生信息管理系统实现代码
Dec 17 Python
python如何保存文本文件
Jun 07 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 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 网页过期时间的控制代码
2009/06/29 PHP
PHP Undefined index报错的修复方法
2011/07/17 PHP
php生成动态验证码gif图片
2015/10/19 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
JS实现倒计时图文效果
2018/11/17 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python多进程实现进程间通信实例
2017/11/24 Python
python读文件的步骤
2019/10/08 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
python中shell执行知识点
2020/05/06 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
女生抽烟检讨书
2014/10/05 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
公司借条范本
2015/05/25 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers