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元组操作实例解析
Sep 23 Python
Python3处理文件中每个词的方法
May 22 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python3爬虫之设计签名小程序
Jun 19 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 Python
python网络编程之五子棋游戏
May 14 Python
django实现日志按日期分割
May 21 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技巧与注意事项分析
2011/02/03 PHP
动态加载iframe
2006/06/16 Javascript
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
js控制input输入字符解析
2013/12/27 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
vue+iview写个弹框的示例代码
2017/12/05 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
如何用Python合并lmdb文件
2018/07/02 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
Python用input输入列表的实例代码
2020/02/07 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
校三好学生主要事迹
2014/01/11 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
小学一年级学生评语
2014/04/22 职场文书
保护环境倡议书100字
2014/05/19 职场文书
庆元旦演讲稿
2014/09/15 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
党员三严三实心得体会
2014/10/13 职场文书
小学科学教学计划
2015/01/21 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
高一军训口号
2015/12/25 职场文书
《给予树》教学反思
2016/03/03 职场文书
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python