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对象类型及其运算方法(详解)
Jul 05 Python
和孩子一起学习python之变量命名规则
May 27 Python
在python中安装basemap的教程
Sep 20 Python
python字典的setdefault的巧妙用法
Aug 07 Python
如何利用python给图片添加半透明水印
Sep 06 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
python scatter函数用法实例详解
Feb 11 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
python中Mako库实例用法
Dec 31 Python
Python之多进程与多线程的使用
Feb 23 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
php递归列出所有文件和目录的代码
2008/09/10 PHP
PHP模板解析类实例
2015/07/09 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
php中数组最简单的使用方法
2020/12/27 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
给Python初学者的一些编程技巧
2015/04/03 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
pandas计数 value_counts()的使用
2019/06/24 Python
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
营销专业应届生求职信
2013/11/26 职场文书
机械设计职业生涯规划书
2013/12/27 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书