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将html转成PDF的实现代码(包含中文)
Mar 04 Python
解密Python中的描述符(descriptor)
Jun 03 Python
Python实现简单的语音识别系统
Dec 13 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
Python处理中文标点符号大集合
May 14 Python
python调用百度语音识别实现大音频文件语音识别功能
Aug 30 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
简单了解Python matplotlib线的属性
Jun 29 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
Python爬虫防封ip的一些技巧
Aug 06 Python
python爬虫selenium模块详解
Mar 30 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
短波收音机简介
2021/03/01 无线电
PHP4中实现动态代理
2006/10/09 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
php中file_exists函数使用详解
2015/05/08 PHP
PHP进程通信基础之信号
2017/02/19 PHP
Dom操作之兼容技巧分享
2011/09/20 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
js实现随机点名
2021/01/19 Javascript
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
Python输出各行命令详解
2018/02/01 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
python如何写出表白程序
2020/06/01 Python
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
大学生护理专业自荐信
2013/10/03 职场文书
副处级干部考察材料
2014/05/17 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
Python编程super应用场景及示例解析
2021/10/05 Python