Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为RSA加密拆分大数据_C_Security_Encryption_Openssl - Fatal编程技术网

C 为RSA加密拆分大数据

C 为RSA加密拆分大数据,c,security,encryption,openssl,C,Security,Encryption,Openssl,最近,我们一直在潜入使用OpenSSL来帮助加密/解密我们拥有的一些数据。每个客户端都将拥有本地证书颁发机构颁发给它们的公钥/私钥对和X509证书。我现在正在研究使用该密钥对加密/解密数据 我所了解的一切都显示了使用RSA加密的RSA_public_encrypt和RSA_private_decrypt方法。但是对于填充类型RSA_PKCS1_OAEP_padding,我可以一次加密的数据量受到RSA_sizersa-41的限制。因此,我的问题是如何在坚持RSA方案的同时加密大量数据—无静态密钥

最近,我们一直在潜入使用OpenSSL来帮助加密/解密我们拥有的一些数据。每个客户端都将拥有本地证书颁发机构颁发给它们的公钥/私钥对和X509证书。我现在正在研究使用该密钥对加密/解密数据

我所了解的一切都显示了使用RSA加密的RSA_public_encrypt和RSA_private_decrypt方法。但是对于填充类型RSA_PKCS1_OAEP_padding,我可以一次加密的数据量受到RSA_sizersa-41的限制。因此,我的问题是如何在坚持RSA方案的同时加密大量数据—无静态密钥短语等。我曾考虑将数据分成若干块,然后对其进行加密,但这似乎有违填充的意义


任何帮助都将不胜感激。

即使你破坏了数据,你也会发现速度慢得令人望而却步。正确的方法是

为对称算法生成随机密钥 使用对称算法和随机密钥加密数据 使用公钥加密随机密钥,并将其存储在数据旁边或之前的加密格式中。
您应该在电子邮件客户端或PGP中使用CMS等标准作为S/MIME支持的基础。几乎每个平台都有这两个标准的库

您会发现,它们的批量数据加密方法非常相似,使用对称密码加密数据,并使用消息收件人的公钥加密该密钥。这种方法既安全又快速

然而,这些标准更进一步,安全地处理您可能还没有想到的事情,如为多个收件人加密数据、将元数据附加到加密内容等。您还可以与其他软件进行互操作。例如,如果您使用S/MIME,您可以使用任何平台上的任何电子邮件客户端进行解密。事实上,根据您的集成需求,您可能不需要自己编写任何软件


使用这些完善的协议之一并不能解决所有的安全问题,但会使做一些真正愚蠢的事情变得更加困难。

有意义。在C语言中生成随机密钥的最佳方法是什么?使用arc4random从UTF8中选择随机字符?openssl或c的stdlib中是否有一个安全的随机类?@Staros arc4random看起来是一个不错的选择,因为它听起来像是一个强大的加密RC4生成器。不过,我还要看看erickson在这个问题上的回答,并检查使用OpenPGP的可能性——它可以为您处理一切。@Staros——从/dev/random读取所需的位数。在任何编码中,它们都不需要是字符。不幸的是,OpenPGP和GnuPG受到一个许可证的限制,该许可证要求您在使用它们时释放所有源代码。@Oscar您一定在谈论实现。OpenPGP是标准的RFC2440和RFC4880。该标准本身没有规定code.CMS的许可证不在OS X上当前版本的OpenSSL中。我认为它是在0.9.9或1.0中引入的。PKCS7是,我猜这也适用。我的印象是CMS是PKCS7的一个更高级的实现。不知道怎么做,也不知道为什么。