如何使用RSA加密来加密长度超过53个字节的邮件?

时间:2019-09-08 17:25:46

标签: python encryption rsa

嘿,我在python中使用 rsa 模块import rsa来加密长度超过53个字节的消息。但是似乎rsa.encrypt(message, private_key)的消息长度限制只有53个字节。

>>> rsa.encrypt(b'A'*53, private_key)
b"(\xe9\xbf\xcc?\x18'\xb4Q@\xce\xb5=\xce#\x91\xb3\xe2+QT\\d\xe4\xaf\x07\xdb\x01\xe2\x83\xc6-\xfe\x03\xa5]\x9a\xad\x90\xb1L\xab\xed\xf3zWw\xccM\xa4.Yw!{\xf4\x08\x95\x9ex7\xbb\x9b\xff"

但长度大于53:

>>> rsa.encrypt(b'A'*54, private_key)
Traceback (most recent call last):
  File "<pyshell#216>", line 1, in <module>
    rsa.encrypt(b' '*54, s_pub)
  File "/usr/local/lib/python3.7/dist-packages/rsa/pkcs1.py", line 172, in encrypt
    padded = _pad_for_encryption(message, keylength)
  File "/usr/local/lib/python3.7/dist-packages/rsa/pkcs1.py", line 89, in _pad_for_encryption
    ' space for %i' % (msglength, max_msglength))
OverflowError: 54 bytes needed for message, but there is only space for 53

有什么办法可以使消息加密的时间更长?

1 个答案:

答案 0 :(得分:2)

使用更大的钥匙。

RSA PKCS#1加密限制为有效负载的((KeySize / 8)-11)个字节。根据您使用的数字,您正在使用RSA-512(“太容易了”,您实际上应该使用1024或2048位RSA)。

RSA加密最常见的用途是加密AES密钥,然后发送加密的AES密钥和AES加密的消息:一种称为混合加密的方案。由于AES密钥很小(16、24或32个字节),因此即使很小的RSA也可以传输它们。