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怎么学好python?
Oct 07 Python
Python实现把回车符\r\n转换成\n
Apr 23 Python
Python提取Linux内核源代码的目录结构实现方法
Jun 24 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
python实现两个文件夹的同步
Aug 29 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
python实现吃苹果小游戏
Mar 21 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
Jan 09 Python
2021年最新用于图像处理的Python库总结
Jun 15 Python
python使用pymysql模块操作MySQL
Jun 16 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
一个用php3编写的简单计数器
2006/10/09 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
python二分法实现实例
2013/11/21 Python
python三元运算符实现方法
2013/12/17 Python
21行Python代码实现拼写检查器
2016/01/25 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
python config文件的读写操作示例
2019/09/27 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
个人能力自我鉴赏
2014/01/25 职场文书
网页美工求职信
2014/02/15 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
2014年信访工作总结
2014/11/17 职场文书
干部年终考核评语
2015/01/04 职场文书
运动会开幕式主持词
2015/07/01 职场文书
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js