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 相关文章推荐
wxPython中listbox用法实例详解
Jun 01 Python
名片管理系统python版
Jan 11 Python
python用post访问restful服务接口的方法
Dec 07 Python
Python之修改图片像素值的方法
Jul 03 Python
python暴力解压rar加密文件过程详解
Jul 05 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
基于python实现把图片转换成素描
Nov 13 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
简单的命令查看安装的python版本号
Aug 28 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
python 基于selectors库实现文件上传与下载
Dec 31 Python
bat批处理之字符串操作的实现
Mar 16 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
Jquery练习之表单验证实现代码
2010/12/14 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
详解react-redux插件入门
2018/04/19 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
python的pdb调试命令的命令整理及实例
2017/07/12 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
django中嵌套的try-except实例
2020/05/21 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
运动会广播稿200字
2014/01/15 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
老员工辞职信范文
2015/05/12 职场文书
获奖感言一句话
2015/07/31 职场文书