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正则表达式 re模块使用说明
May 19 Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
Python实现二叉搜索树
Feb 03 Python
Django实现简单分页功能的方法详解
Dec 05 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
Python猜数字算法题详解
Mar 01 Python
Python实现冒泡排序算法的完整实例
Nov 04 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 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导出Word文档的原理和实例
2013/10/21 PHP
php判断linux下程序问题实例
2015/07/09 PHP
js字符编码函数区别分析
2011/12/28 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
Python优先队列实现方法示例
2017/09/21 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
python实现网页录音效果
2020/10/26 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
Linux机考试题
2015/10/16 面试题
小学中秋节活动方案
2014/02/06 职场文书
海飞丝广告词
2014/03/20 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
主要负责人任命书
2014/06/06 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
初中中等生评语
2014/12/29 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
2015年党总支工作总结
2015/05/25 职场文书
公司业务员管理制度
2015/08/05 职场文书
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android