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多线程编程简单介绍
Apr 13 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
python实现txt文件格式转换为arff格式
May 31 Python
Python向excel中写入数据的方法
May 05 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
使用opencv中匹配点对的坐标提取方式
Jun 04 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
python 自动刷新网页的两种方法
Apr 20 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
Python+Appium自动化测试的实战
Jun 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
php xml文件操作代码(一)
2009/03/20 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
php浏览历史记录的方法
2015/03/10 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
python日志logging模块使用方法分析
2019/05/23 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
pandas apply多线程实现代码
2020/08/17 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
幼儿园毕业教师感言
2014/02/21 职场文书
买卖车协议书
2014/04/21 职场文书
学校督导评估方案
2014/06/10 职场文书
一年级语文教学随笔
2015/08/14 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android