我正在尝试使用Python M2Crypto的RSA通过外部站点提供给我的公钥对消息进行编码。基本上,我正在做这样的事情:
from M2Crypto import RSA
import os
rsa = RSA.load_pub_key(os.path.join(BASE_PATH, 'external_site.pem'))
rsa_result = rsa.public_encrypt(message, 3).encode('base64')
如果我在加密时不使用填充,则收到错误:
RSAError: data too small for key size
我理解为什么消息长度有一个上限(RSA加密的模数),但我不明白为什么会有一个下限。有人可以解释这一点,还是指出我正确的方向来解决这个问题?
答案 0 :(得分:1)
还有作为消息的下限,否则,RSA操作将是常规算术,而不是模块化算术。
必须是真的,对于给定的消息,换句话说需要足够大才能减少,或者对手可以只需计算并恢复消息,因为从未减少了。因此,
每条消息都需要。
举个例子:
让 然后 在这个例子中我们不需要,因为失败发生在那个点之前。
但也是:
答案 1 :(得分:0)
(从评论中重复回答,只是为了“关闭”)
您可能需要以某种方式告诉您的API使用OAEP填充。如果使用填充,错误可能会消失。如果没有填充,则消息长度可能需要等于模数长度。但是不使用填充有严重的安全问题,所以除非你真的知道你在做什么,否则不要这样做。
答案 2 :(得分:0)
不知怎的重复。见这里:RSA Encryption Problem [Size of payload data] 第二个答案解释了你的问题非常好。