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之入门(三)序列
May 25 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
独特的python循环语句
Nov 20 Python
Python基于whois模块简单识别网站域名及所有者的方法
Apr 23 Python
python 提取key 为中文的json 串方法
Dec 31 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
Pytorch 实现权重初始化
Dec 31 Python
Django认证系统user对象实现过程解析
Mar 02 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
pandas中对文本类型数据的处理小结
Nov 01 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获取网络文件的实现代码
2010/01/01 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
JavaScript事件列表解说
2006/12/22 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
Python学习小技巧之列表项的拼接
2017/05/20 Python
目前最全的python的就业方向
2018/06/05 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
三年大学自我鉴定
2014/01/16 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
志愿者事迹材料
2014/12/26 职场文书
华山导游词
2015/02/03 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android