PHP 的 OpenSSL 函数可以使用带有公钥/私钥的 AES 密码吗?



我看过许多关于如何通过OpenSSL使用对称加密的AES的例子。但我使用的是非对称加密。我的网络应用程序存储了一些用公钥加密的敏感数据,只有管理员可以提供私钥密码,这些数据才会用私钥解密。

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

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

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

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

我想这实际上就是OpenSSL函数的作用,可能取决于密钥类型。

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

我建议创建RSA私钥和公钥。请参阅这篇伟大的文章

最新更新