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
使用Python3制作TCP端口扫描器
Apr 17 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
Python基于gevent实现文件字符串查找器
Aug 11 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 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 array_merge下进行数组合并的代码
2008/07/22 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
JS定时器实例
2013/04/17 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
python BeautifulSoup使用方法详解
2013/11/21 Python
Python多进程编程技术实例分析
2014/09/16 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
Python对wav文件的重采样实例
2020/02/25 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
Python 忽略文件名编码的方法
2020/08/01 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
物业电工岗位职责
2013/11/20 职场文书
保研推荐信
2014/05/09 职场文书
小升初自荐信范文
2015/03/05 职场文书
手机销售员岗位职责
2015/04/11 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
办公室管理规章制度
2015/08/04 职场文书
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技
vscode内网访问服务器的方法
2022/06/28 Servers
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android