python rsa 加密解密


Posted in Python onMarch 20, 2017

最近有需求,需要研究一下RSA加密解密安全;在网上百度了一下例子文章,很少有文章介绍怎么保存、传输、打印加密后的文本信息,都是千篇一律的。直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密。仔细想了一下RSA加密解密的过程,确定有二端,一端为:加密端,一端为解密端,一般不在同一台机器。在这里,我只模拟了保存在文件,然后再读出来;关于怎以通过网络传输,也是大同小异。

用RSA加密后的密文,是无法直接用文本显示,因为存在一些无法用文本信息编码显示的二进制数据。对于保存,网络传输,打印不乱码,需要通base64编码进行转换;base64编解码能把一些无法直接用文件本信息编码的二进制数据,转换成常规的二进制数据。

#/usr/bin/env python
# -*- coding: utf-8 -*-
import rsa
import sys
import base64
# 打印 python 版本 与 windows 系统编码
print("---- 1 ----")
print(sys.version)
print(sys.getdefaultencoding())
print(sys.getfilesystemencoding())
# 先生成一对密钥,然后保存.pem格式文件,当然也可以直接使用
print("---- 2 ----")
(pubkey, privkey) = rsa.newkeys(1024)
pub = pubkey.save_pkcs1()
print(type(pub))
pubfile = open('public.pem','w+')
pubfile.write(pub.decode('utf-8'))
pubfile.close()
print("---- 3 ----")
pri = privkey.save_pkcs1()
print(type(pri))
prifile = open('private.pem','w+')
prifile.write(pri.decode('utf-8'))
prifile.close()
# load公钥和密钥
print("---- 4 ----")
message = 'dPabdbGDpFTrwwgydVafdlsadlfsal%46645645s'
print('message:',type(message))
with open('public.pem') as publickfile:
 p = publickfile.read()
 print(type(p))
 pubkey = rsa.PublicKey.load_pkcs1(p.encode('utf-8'))
with open('private.pem') as privatefile:
 p = privatefile.read()
 print(type(p))
 privkey = rsa.PrivateKey.load_pkcs1(p.encode('utf-8'))
# 用公钥加密、再用私钥解密
crypto = rsa.encrypt(message.encode('utf-8'),pubkey)
print(crypto)
print("---- 5 ----")
print('crypto:',type(crypto))
print('cry_base64:',base64.encodestring(crypto))
print('cry_base64_utf8:',base64.encodestring(crypto).decode('utf-8'))
# 保存到本地文件
cry_file = open('cry_file.txt','w+')
cry_file.write(base64.encodestring(crypto).decode('utf-8'))
cry_file.close()
print("---- 6 ----")
# 从本地文件读取
cry_file = open('cry_file.txt','r')
cry_text = ''
for i in cry_file.readlines():
 cry_text += i
print('cry_text_type:',type(cry_text))
print('cry_text:',cry_text)
print('cry_base64:',cry_text.encode('utf-8'))
crypto_tra = base64.decodestring(cry_text.encode('utf-8'))
print("---- 7 ----")
assert crypto == crypto_tra
print(crypto)
print("---- 8 ----")
plaintext = rsa.decrypt(crypto,privkey)
assert message == plaintext.decode('utf-8')
print(plaintext.decode('utf-8'))

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
python网络爬虫采集联想词示例
Feb 11 Python
Python中使用HTMLParser解析html实例
Feb 08 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
Python中反射和描述器总结
Sep 23 Python
CentOS7安装Python3的教程详解
Apr 10 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 #Python
python list排序的两种方法及实例讲解
Mar 20 #Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 #Python
Python 专题四 文件基础知识
Mar 20 #Python
python 与GO中操作slice,list的方式实例代码
Mar 20 #Python
Python闭包的两个注意事项(推荐)
Mar 20 #Python
使用python实现生成用户信息
Mar 20 #Python
You might like
深入密码加salt原理的分析
2013/06/06 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
Python实现图片滑动式验证识别方法
2017/11/09 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python管理Windows服务小脚本
2018/03/12 Python
使用python 3实现发送邮件功能
2018/06/15 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
幼儿教师国培感言
2014/02/19 职场文书
房屋租赁协议书
2014/04/10 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
医院感染管理制度
2015/08/05 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js