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 list使用示例 list中找连续的数字
Jan 27 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 Python
基于Python的OCR实现示例
Apr 03 Python
浅析python 通⽤爬⾍和聚焦爬⾍
Sep 28 Python
如何通过python检查文件是否被占用
Dec 18 Python
python 实现mysql自动增删分区的方法
Apr 01 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 Python
Pandas数据结构之Series的使用
Mar 31 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
js对数字的格式化使用说明
2011/01/12 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python实现购物程序思路及代码
2017/07/24 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
深入了解Python在HDA中的应用
2019/09/05 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
心理健康教育制度
2014/01/27 职场文书
美术教师自我鉴定
2014/02/12 职场文书
大课间体育活动方案
2014/03/12 职场文书
公开服务承诺制度
2014/03/26 职场文书
公务员考察材料
2014/12/23 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
Python 语言实现六大查找算法
2021/06/30 Python
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js