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 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
神经网络(BP)算法Python实现及应用
Apr 16 Python
python全栈知识点总结
Jul 01 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
Python配置文件处理的方法教程
Aug 29 Python
使用Python FastAPI构建Web服务的实现
Jun 08 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 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环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
php生成图片验证码的方法
2016/04/15 PHP
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
Python最小二乘法矩阵
2019/01/02 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
计算机专业大学生的自我评价
2013/11/14 职场文书
欢送退休感言
2014/02/08 职场文书
向领导表决心的话
2014/03/11 职场文书
搞笑爱情保证书
2014/04/29 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
志愿服务心得体会
2016/01/15 职场文书
《窃读记》教学反思
2016/02/18 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python