RSA_size(rsa)
在我的应用程序中返回模数,等于256。
我使用RSA_PKCS1_OAEP_PADDING
选项加密数据,因此发送到RSA_public_encrypt()
的输入缓冲区的最大长度为256 - 41 = 215
在某些情况下,输入缓冲区的长度可能会超过215的限制,我需要调用RSA_public_encrypt()
多个时间段。
我的问题是关于RSA_public_encrypt()
的返回值。
从我的测试中,返回值为256(等于RSA_size(rsa)
),
doc也说:
RSA_public_encrypt()返回加密数据的大小(即 RSA_size(RSA))。
我只是想确保RSA_public_encrypt()
的返回值只有两种可能性。
-1(错误)或模数(成功),没有其他可能性,是吗?
我很好奇,因为我需要划分加密缓冲区并为每个块调用RSA_private_decrypt()
。如果每个RSA_public_encrypt
的加密缓冲区相同,那么我不需要为每个缓冲区存储大小。
答案 0 :(得分:11)
对于所有当前已知的PKCS#1加密模式,RSA_public_encrypt()的(正)返回将始终与RSA_size(rsa)相同。
简而言之:您当前的假设是正确的。
实际上:如果您的数据大于RSA_size(rsa)并且您将其拆分为块,则应该考虑使用随机对称密钥加密数据并使用RSA_public_key()加密该密钥。 RSA公钥加密并不适用于较大的数据块。
加密大于RSA_size(rsa)的事物的最佳方法 - XX(其中XX取决于所使用的PKCS#1模式):
另一方面:
答案 1 :(得分:0)
RSA_encrypt()的输出可能包含一些前导零位,我不确定openssl是否保留它们。切割它们将导致输出缩短一个字节。 这种情况很少发生。
如果您的输入仅增大,为什么不增加RSA密钥的大小?无论如何,你可以拥有2536位RSA密钥或3072位。