首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSA_public_encrypt()返回的大小总是= RSA_size(rsa)?

RSA_public_encrypt()返回的大小总是= RSA_size(rsa)?
EN

Stack Overflow用户
提问于 2012-12-17 04:48:58
回答 2查看 6.2K关注 0票数 2

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的加密缓冲区是相同的,那么我不需要存储它们的大小。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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模式)的最佳方法:

  • 生成一个16字节的随机IV (应该是唯一的)
  • 生成32字节(256位)的随机密钥K
  • KIV加密数据,使用AES-CBC (考虑填充)或AES-CTR加密到电子数据中。
  • 使用SHA-256 (或任何适合您的情况的哈希算法)将加密数据E- data 散列到散列H中。
  • 用RSA公钥加密IV、key K和hash H (IV也可以公开,但这通常更容易)到EE 233
  • 将加密数据E- data 和加密密钥数据E发送到另一边

在另一边:

  • 将E解密为IV、K和H (如果失败则保释)
  • 散列E-数据并与H检查(如果失败就退出)
  • 解密E-数据与IV和K
  • 完成了..。
票数 11
EN

Stack Overflow用户

发布于 2012-12-17 09:31:09

RSA_encrypt()的输出可能包含一些前导零位,我不确定openssl是否保留了它们。削减它们将导致输出,这是一个字节短。这种情况很少发生。

如果您的输入只大一点,为什么不增加RSA密钥的大小呢?您可以有2536位RSA密钥,或3072位,其他什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13908407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档