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) ),文档还表示:
RSA_public_encrypt()返回加密数据的大小(即RSA_size(rsa))。
我只想确保RSA_public_encrypt()的返回值只有两种可能性。
modulus(success),和-1 (错误)和没有其他可能性,对吗?我很好奇,因为我需要分割加密的缓冲区,并为每个块调用RSA_private_decrypt()。如果每个RSA_public_encrypt的加密缓冲区是相同的,那么我不需要存储它们的大小。
发布于 2012-12-17 07:50:03
对于所有当前已知的RSA_public_encrypt加密模式,RSA_public_encrypt()的(正)返回始终与RSA_size(rsa)相同。
所以简单地说:你目前的假设是正确的。
但是实际上:如果您的数据大于RSA_size(rsa),并且将其分割成块,那么您可能应该考虑使用随机对称密钥加密数据,并使用RSA_public_key()加密该密钥。RSA公钥加密不打算用于较大的数据块。
加密大于RSA_size(rsa) - XX (其中XX依赖于所使用的PKCS#1模式)的最佳方法:
E 233在另一边:
发布于 2012-12-17 09:31:09
RSA_encrypt()的输出可能包含一些前导零位,我不确定openssl是否保留了它们。削减它们将导致输出,这是一个字节短。这种情况很少发生。
如果您的输入只大一点,为什么不增加RSA密钥的大小呢?您可以有2536位RSA密钥,或3072位,其他什么。
https://stackoverflow.com/questions/13908407
复制相似问题