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简明入门教程
Aug 04 Python
解决pycharm运行出错,代码正确结果不显示的问题
Nov 30 Python
在pycharm中设置显示行数的方法
Jan 16 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
Django中如何使用sass的方法步骤
Jul 09 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
pygame实现五子棋游戏
Oct 29 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
Python语言异常处理测试过程解析
Jan 08 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
python 实现一个简单的线性回归案例
Dec 17 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
function.inc.php超越php
2006/12/09 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
详解Python中for循环的使用
2015/04/14 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
python2 与python3的print区别小结
2018/01/16 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
Python实现AI换脸功能
2020/04/10 Python
python爬虫基础知识点整理
2020/06/02 Python
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
成功的餐厅经营创业计划书
2014/01/15 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
新兵入伍决心书
2015/09/22 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
导游词之西安骊山
2019/12/03 职场文书