1

我已经看到了许多关于如何通过 OpenSSL 和对称加密使用 AES 的示例。但我使用的是非对称加密。我的 web 应用程序正在存储一些使用公钥加密的敏感数据,如果管理员可以提供私钥密码,则稍后只能使用私钥解密。

我的实现运行良好,但是,我注意到非常小的输入会产生相当大的加密结果。例如,一个 16 个字符的输入变成了 288 个字节的加密(它解密为原始的 16 个字符)。由于这些加密结果存储在数据库表中,我希望获得更接近输入大小的加密值。也需要可预测的存储长度。

我正在使用 RSA 公钥/私钥,但 PHP 的 OpenSSL 实现默认使用什么密码?我还没有找到一个使用公钥/私钥时如何指定密码的示例,并且openssl_public_encrypt函数不允许指定密码常量之一。我应该在生成 pub/pri 密钥时以某种方式指定密码(使用openssl_pkey_new)?

4

2 回答 2

0

我建议创建 RSA 私钥和公钥。看到这篇很棒的文章

于 2014-08-26T13:47:37.747 回答
0

AES 是一种对称加密算法,它不支持公钥/私钥对。谁可以加密谁也可以解密密文。

可以将 AES 与 RSA 之类的非对称算法相结合以获得混合方案:使用 RSA 加密(随机)AES 密钥,然后使用 AES 加密实际数据。不过,您仍然会拥有大约 RSA 模数大小的最小密文大小的 RSA 开销(因为这是 RSA 的输出)。

我想这实际上是您的 OpenSSL 函数所做的,可能取决于密钥类型。

还有其他公钥方案,特别是基于椭圆曲线的方案,它们允许较小的开销,以实现与 RSA 类似的安全性。(不过,我不知道 OpenSSL 或其 PHP 绑定是否支持这些。)

于 2012-09-22T23:52:56.857 回答