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对象的深拷贝和浅拷贝详解
Aug 25 Python
跟老齐学Python之数据类型总结
Sep 24 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
Python拼接微信好友头像大图的实现方法
Aug 01 Python
Django forms表单 select下拉框的传值实例
Jul 19 Python
python 循环数据赋值实例
Dec 02 Python
Pytorch 实现权重初始化
Dec 31 Python
python logging.basicConfig不生效的原因及解决
Feb 20 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
Python内置函数locals和globals对比
Apr 28 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
Python的subprocess模块总结
2014/11/07 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python实现最小二乘法线性拟合
2019/07/19 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
通俗讲解python 装饰器
2020/09/07 Python
La Senza官网:北美顶尖性感内衣品牌
2018/08/03 全球购物
医学专业职业生涯规划范文
2014/02/05 职场文书
对标管理实施方案
2014/03/12 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
初三毕业感言
2015/07/31 职场文书