gpt4 book ai didi

encryption - openssl RSA_public_encrypt() 返回的大小总是 = RSA_size(rsa)?

转载 作者:行者123 更新时间:2023-12-04 01:18:00 26 4
gpt4 key购买 nike

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() returns the size of the encrypted data (i.e., RSA_size(rsa)).

我只是想确保RSA_public_encrypt()的返回值只有两种可能。

-1(错误)模数(成功),并且没有其他可能性,是吗?我很好奇,因为我需要划分加密缓冲区并为每个 block 调用 RSA_private_decrypt()。如果每个 RSA_public_encrypt 的加密缓冲区是相同的,那么我不需要存储每个缓冲区的大小。

最佳答案

对于所有当前已知的 PKCS#1 加密模式,RSA_public_encrypt() 的(正)返回将始终与 RSA_size(rsa) 相同。

简而言之:您当前的假设是正确的。

但实际上:如果您的数据大于 RSA_size(rsa) 并且您将其分成 block ,您可能应该考虑使用随机对称 key 加密数据并使用 RSA_public_key() 加密该 key 。 RSA 公钥加密不适用于更大的数据 block 。

加密大于 RSA_size(rsa) - XX 的内容的最佳方法(其中 XX 取决于所使用的 PKCS#1 模式):

  • 生成一个 16 字节的随机 IV(应该是唯一的)
  • 生成 32 字节(256 位)的随 secret 钥 K
  • 使用 AES-CBC(考虑填充)或 AES-CTR 使用 KIV 将数据加密到 E-DATA
  • 使用 SHA-256(或适合您的情况的任何合适的哈希算法)将加密数据 E-DATA 哈希为哈希 H
  • 用RS​​A公钥加密IV, key K和散列H(IV可以公开也,但这通常更容易)到 E-RSA
  • 发送加密数据E-DATA和加密 key 数据E-RSA给对方

另一边:

  • E-RSA解密为IVKH(失败则退出)<
  • 散列E-DATA并用H检查(如果失败则退出)
  • IVK解密E-DATA
  • 完成..

关于encryption - openssl RSA_public_encrypt() 返回的大小总是 = RSA_size(rsa)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13908407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com