2012-08-31 65 views
1

我见过很多关于如何通过OpenSSL和对称加密使用AES的例子。但我正在使用非对称加密。我的web应用程序正在存储一些使用公钥加密的敏感数据,如果管理员可以提供私钥密码,以后只能使用私钥解密。PHP的OpenSSL功能可以使用带有公钥/私钥的AES密码吗?

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

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

回答

0

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

一个可以与非对称算法如RSA结合AES,得到的混合方案:一种使用RSA加密一个(随机)的AES密钥,然后使用AES来加密的实际数据。尽管如此,RSA模数的大小(因为这是RSA的输出)的最小密文大小仍然会产生RSA开销。

我想这实际上是你的OpenSSL函数的功能,也许取决于键的类型。

还有其他的公钥方案,特别是那些基于椭圆曲线,这让更小的尺寸开销类似的安全为RSA。 (我不知道这些是由OpenSSL的或它的PHP绑定的支持,虽然)。

0

我会建议创建RSA私钥和公钥。见This great article

+0

我知道你要问不太什么,但在文章中说明了如何选择CYPHER和密钥长度,进而影响你的加密内容的最小长度。 – robwithhair

相关问题