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逐行读取文件内容的三种方法
Jan 20 Python
Python编写生成验证码的脚本的教程
May 04 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
Python编写Windows Service服务程序
Jan 04 Python
Python实现的rsa加密算法详解
Jan 24 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
python list转置和前后反转的例子
Aug 26 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
关于tf.matmul() 和tf.multiply() 的区别说明
Jun 18 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 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中in_array函数用法分析
2014/11/15 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
js下利用控制器载入对应脚本
2010/07/17 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
python BeautifulSoup使用方法详解
2013/11/21 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
Python 加密的实例详解
2017/10/09 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
python实现连续图文识别
2018/12/18 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
python几种常用功能实现代码实例
2019/12/25 Python
Pytorch之保存读取模型实例
2019/12/30 Python
使用Python实现音频双通道分离
2020/12/25 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
品质保证书格式
2015/02/28 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
如何在Python中创建二叉树
2021/03/30 Python