python rsa 加密解密

 更新时间:2017年03月20日 17:14:28   作者:cranezhou  
本篇文章主要介绍了python rsa加密解密 (编解码,base64编解码)的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧

最近有需求,需要研究一下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数据获取实现图片数据提取

    本文主要介绍了Python数据获取实现图片数据提取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 使用python搭建代理IP池实现接口设置与整体调度

    使用python搭建代理IP池实现接口设置与整体调度

    在网络爬虫中,代理IP池是一个非常重要的组件,由于许多网站对单个IP的请求有限制,因此,我们需要一个代理IP池,在本文中,我们将使用Python来构建一个代理IP池,然后,我们将使用这个代理IP池来访问我们需要的数据,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12
  • pytorch使用voc分割数据集训练FCN流程讲解

    pytorch使用voc分割数据集训练FCN流程讲解

    这篇文章主要介绍了pytorch使用voc分割数据集训练FCN流程,图像分割发展过程也经历了传统算法到深度学习算法的转变,传统的分割算法包括阈值分割、分水岭、边缘检测等等
    2022-12-12
  • Python使用贪婪算法解决问题

    Python使用贪婪算法解决问题

    这篇文章主要介绍了Python使用贪婪算法解决问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • python 利用文件锁单例执行脚本的方法

    python 利用文件锁单例执行脚本的方法

    今天小编就为大家分享一篇python 利用文件锁单例执行脚本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • 深入理解Python虚拟机中常见魔术方法的使用

    深入理解Python虚拟机中常见魔术方法的使用

    本文主要给大家介绍在 python 当中与数学计算相关的一些常见的魔术方法,是在很多科学计算的包当中都使用到的魔术方法,感兴趣的小伙伴可以了解一下
    2023-05-05
  • Python基于YOLOv8和OpenCV实现车道线和车辆检测功能

    Python基于YOLOv8和OpenCV实现车道线和车辆检测功能

    使用YOLOv8(You Only Look Once)和OpenCV实现车道线和车辆检测,目标是创建一个可以检测道路上的车道并识别车辆的系统,并估计它们与摄像头的距离,这篇文章主要介绍了Python基于YOLOv8和OpenCV实现车道线和车辆检测,需要的朋友可以参考下
    2025-01-01
  • Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】

    Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】

    这篇文章主要介绍了Python统计一个字符串中每个字符出现了多少次的方法,涉及Python字符串转换及列表遍历、统计等相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • Windows下为Python安装Matplotlib模块

    Windows下为Python安装Matplotlib模块

    这篇文章主要介绍了如何在Windows下为Python安装Matplotlib模块的方法,非常的详细,而且附上了官方的下载地址,小伙伴们操作起来应该毫无压力了。
    2015-11-11
  • Python中return用法案例详解

    Python中return用法案例详解

    这篇文章主要介绍了Python中return用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论