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正则分组的应用
Nov 10 Python
python定时器使用示例分享
Feb 16 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
Python中的descriptor描述器简明使用指南
Jun 02 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
python 队列详解及实例代码
Oct 18 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
pymysql的简单封装代码实例
Jan 08 Python
python里glob模块知识点总结
Jan 05 Python
Python 键盘事件详解
Nov 11 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
JavaScript高级程序设计
2006/12/29 Javascript
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
javascript的this关键字详解
2019/05/20 Javascript
Python字符遍历的艺术
2008/09/06 Python
python回调函数的使用方法
2014/01/23 Python
python下MySQLdb用法实例分析
2015/06/08 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
python__new__内置静态方法使用解析
2020/01/07 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
python中常用的数据结构介绍
2021/01/12 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
四年级评语大全
2014/04/21 职场文书
食品销售计划书
2014/04/26 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
加薪通知
2015/04/25 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python