【问题标题】:Can PHP's OpenSSL functions use the AES cipher with public/private keys?PHP 的 OpenSSL 函数可以使用带有公钥/私钥的 AES 密码吗?
【发布时间】:2012-08-25 22:45:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: php openssl aes public-key-encryption


    【解决方案1】:

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

    【讨论】:

    • 我不太了解您的要求,但在文章中它向您展示了如何选择密码和密钥长度,这反过来会影响加密内容的最小长度。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2013-06-09
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多