Python Crypto,RSA公钥/私钥,包含大文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python Crypto,RSA公钥/私钥,包含大文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2896字,纯文字阅读大概需要5分钟。
内容图文
![Python Crypto,RSA公钥/私钥,包含大文件](/upload/InfoBanner/zyjiaocheng/753/8a962f70fbbb4a0ba8ce219b31f52ae6.jpg)
我现在知道RSA公钥/私钥只能一次加密非常短的输入,但任何人都可以提供一种方法来加密任何类型的文件(.txt,.phf,.exe等)只有公钥/私钥?我不想要额外的AES密钥.
这是我的代码,我的加密和解密后,我没有得到原始内容与公共&私钥.我不关心加密或解密的安全性,我只想让简单的加密解密工作在它可能需要的任何输入上,无论它有多长或多大.
from Crypto.PublicKey import RSA
from Crypto import Random
random_generator = Random.new().read
key = RSA.generate(1024, random_generator)
public_key = key.publickey()
f = open('C:\Users\Administrator\Desktop\jack.txt','r').read()
print 'original content: '+ f
enc_data = public_key.encrypt(f, 32)
print 'encrypted data: '
print enc_data
dec_data = key.decrypt(enc_data)
print 'decrypted data: '+ dec_data
这是输出:
original content: Python Cryptography Toolkit
A collection of cryptographic modules implementing various algorithms and protocols.
Subpackages:
Crypto.Cipher
Secret-key (AES, DES, ARC4) and public-key encryption (RSA PKCS#1) algorithms
Crypto.Hash
Hashing algorithms (MD5, SHA, HMAC)
Crypto.Protocol
Cryptographic protocols (Chaffing, all-or-nothing transform, key derivation functions). This package does not contain any network protocols.
Crypto.PublicKey
Public-key encryption and signature algorithms (RSA, DSA)
Crypto.Signature
Public-key signature algorithms (RSA PKCS#1)
Crypto.Util
Various useful modules and functions (long-to-string conversion, random number generation, number theoretic functions)
encrypted data:
('\x08\xe3\x9d\x03\x1e\xe9(\xe2\xc7\xc6e\x0b5\x02\xc0\xd8G\x1f\xf5\xb8\x9cMC\x93Z\x982\xa5\x97\xec\xab4\x18\xc2\xc8\xd9\xd3\x99aX\xd96b\x19\x96\xdc\x1d|F\xe0\xa9\xa9\xea\x03\x10>0g\x83\xdb\xeb\xdb\x13\x91\xc6\xd8\xf6\x95\xedE@A\x0bc\xae\xbe\xbe\xf0\xde\xcc\xcexk\x10\xb3\x86\xd3\xdd\xd0\xca@T2\x9a\x8a6ut\xb1\xaf\x07\x1f\xa2M\r\xf0D\xa2`h\xc3\x89\x18\x0e\xd4\xca\xee\xf5\xfc\x01\xed\x95}X\x1f\x13 1',)
decrypted data: ???J?rPX ?????ju?a,?xm?'?]?????y;?)??t??,?D4^?ba?8????9q
+?i??l ?q]Kd?Y???u??S?B?????^?A3
.7??j??m?
?6?dl? qU
解决方法:
RSA只能加密有限的输入.多少取决于RSA的密钥大小(在您的情况下为1024位)和使用的填充.比这更大的东西(没有使用填充时为128字节,如果使用填充则更少)并且您无法再恢复它.
解决方案是使用混合加密.
>生成一个随机字节串16,24或32字节用作AES密钥,
>使用以前生成的密钥和AES使用AES加密实际数据
>使用RSA加密AES密钥.
AES加密:
from Crypto.Cipher import AES
from Crypto import Random
aeskey = Random.new().read(32)
iv = Random.new().read(AES.block_size)
cipher = AES.new(aeskey, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn')
RSA加密(使用像OAEP这样的正确填充,因为教科书RSA被严重破坏):
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
message = aeskey
random_generator = Random.new().read
rsakey = RSA.generate(1024, random_generator)
cipher = PKCS1_OAEP.new(rsakey.publickey())
ciphertext = cipher.encrypt(message)
并且只发送msg和密文.解密类似,但后退,因为您首先必须从RSA密文恢复AES密钥.在使用AES解密时,不要忘记切掉IV.
内容总结
以上是互联网集市为您收集整理的Python Crypto,RSA公钥/私钥,包含大文件全部内容,希望文章能够帮你解决Python Crypto,RSA公钥/私钥,包含大文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。