【发布时间】:2021-01-23 07:54:53
【问题描述】:
我正在使用以下代码来实现用于加密和解密数据的基本 RSA 解决方案,但是当我尝试加密任何长度超过 87 个字符的文本时,我收到来自文件 Crypto/Cipher/PKCS1_OAEP.py 的错误消息 Plaintext is too long .
我读到了 RSA 无法加密和解密大量数据的其他问题,但我不确定这是否属实。如果是,我可以使用哪些其他选项来加密任意数量的数据?
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA512, SHA384, SHA256, SHA, MD5
from Crypto import Random
from base64 import b64encode, b64decode
hash = "SHA-256"
def newkeys(keysize):
random_generator = Random.new().read
key = RSA.generate(keysize, random_generator)
private, public = key, key.publickey()
return public, private
def encrypt(message, pub_key):
cipher = PKCS1_OAEP.new(pub_key)
return cipher.encrypt(message)
【问题讨论】:
-
您可以阅读这里给出的一些建议:crypto.stackexchange.com/questions/50033/…。
-
@KrishnaChaurasia 感谢您指出显而易见的问题,您了解该问题中提出的任何解决方案吗?好吧,我也没有。
-
RSA 只能加密明文的密钥长度,例如,使用 RSA 2048 密钥 = 2048 位 = 256 字节)您可以加密 256 字节减去所需的数据内部填充,所以最后你可以加密大约数百字节的明文(取决于密钥长度)。加密较长明文的解决方案是使用混合加密,这意味着您在 GCM 模式下使用 AES 等 对称 算法加密数据,并使用随机生成的密钥(32 字节长)。在第二步中,您使用您的 RSA 公钥加密此密钥。用于解密 - 首先是 RSA,而不是 AES。