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 相关文章推荐
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
Python存取XML的常见方法实例分析
Mar 21 Python
python3模块smtplib实现发送邮件功能
May 22 Python
python实现遍历文件夹修改文件后缀
Aug 28 Python
python文件写入write()的操作
May 14 Python
python顺序执行多个py文件的方法
Jun 29 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
python文件读写代码实例
Oct 21 Python
Python 获取numpy.array索引值的实例
Dec 06 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
什么是python的必选参数
Jun 21 Python
解决python对齐错误的方法
Jul 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
PHP遍历数组的方法汇总
2015/04/30 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
Javascript中的 “&” 和 “|” 详解
2017/02/02 Javascript
react路由配置方式详解
2017/08/07 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
vue实现侧边栏导航效果
2019/10/21 Javascript
基于Python实现一个简单的银行转账操作
2016/03/06 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
Django-imagekit的使用详解
2020/07/06 Python
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
新闻专业本科生的自我评价分享
2013/11/20 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
协议书范本
2014/04/23 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
2014年检验员工作总结
2014/11/19 职场文书
2015国庆节宣传语
2015/07/14 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
python 网络编程要点总结
2021/06/18 Python
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
室外天线与收音机天线杆接合方法
2022/04/05 无线电
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技