python rsa 加密解密
Python  /  管理员 发布于 7年前   164
最近有需求,需要研究一下RSA加密解密安全;在网上百度了一下例子文章,很少有文章介绍怎么保存、传输、打印加密后的文本信息,都是千篇一律的。直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密。仔细想了一下RSA加密解密的过程,确定有二端,一端为:加密端,一端为解密端,一般不在同一台机器。在这里,我只模拟了保存在文件,然后再读出来;关于怎以通过网络传输,也是大同小异。
用RSA加密后的密文,是无法直接用文本显示,因为存在一些无法用文本信息编码显示的二进制数据。对于保存,网络传输,打印不乱码,需要通base64编码进行转换;base64编解码能把一些无法直接用文件本信息编码的二进制数据,转换成常规的二进制数据。
#/usr/bin/env python# -*- coding: utf-8 -*-import rsaimport sysimport 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 += iprint('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_traprint(crypto)print("---- 8 ----")plaintext = rsa.decrypt(crypto,privkey)assert message == plaintext.decode('utf-8')print(plaintext.decode('utf-8'))以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号
