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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
python数组复制拷贝的实现方法
Jun 09 Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 Python
python实现分页效果
Oct 25 Python
使用python实现BLAST
Feb 12 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
pandas去除重复列的实现方法
Jan 29 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
python3对接mysql数据库实例详解
Apr 30 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
实例详解Python的进程,线程和协程
Mar 13 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
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
python画双y轴图像的示例代码
2019/07/07 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
django序列化serializers过程解析
2019/12/14 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
如何使用repr调试python程序
2020/02/28 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
酒店辞职信怎么写
2015/02/27 职场文书
2016新年晚会开场白
2015/12/03 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python