【问题标题】:How to handle AES key in Symfony如何在 Symfony 中处理 AES 密钥
【发布时间】:2018-11-17 17:45:24
【问题描述】:

我正在使用 Symfony 3.4 和 PHP 7.2 和一个 SQLite db 开发一个 Web 应用程序。

我想使用标准库(openssl 或钠)使用 AES-256 加密我的实体的某些字段,但我真的不确定如何正确执行此操作,所以在我做很多大之前我请求您的指导可怕的错误:

  1. 存储密钥和 IV 的最佳做法是什么?
  2. 只要 Web 浏览器无法访问它,我把它放在哪里是否相关?我正在考虑将它们放在 config.yml 中,但感觉不对,非常不对
  3. openssl 和钠之间哪个库更安全?

【问题讨论】:

  • @Federkun 谢谢,确实如此。在所有安全问题上使用第三方库是否安全?我不是一个非常信任的人,但我不想无缘无故跳过完全合法的图书馆。

标签: php sqlite symfony doctrine-orm aes


【解决方案1】:

我正在使用以下代码,其中我的秘密存储在 parameters.yml 中,因此如果将其推送到 Git,它将不可见。

/**
 * SecurityHelper.
 *
 * @author Kengy Van Hijfte <development@kengy.be>
 */
class SecurityHelper
{
    /** @var  string $secret */
    private $secret;

    public function __construct($secret)
    {
        $this->secret = $secret;
    }

    /**
     * @param $text
     * @return string
     */
    public function encrypt($text)
    {
        if (null == $text)
            return null;

        // Generate an initialization vector
        $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
        // Encrypt the data using AES 256 encryption in CBC mode using our encryption key and initialization vector.
        $encrypted = openssl_encrypt($text, 'aes-256-cbc', $this->secret, 0, $iv);
        // The $iv is just as important as the key for decrypting, so save it with our encrypted data using a unique separator (::)
        return base64_encode($encrypted . '::' . $iv);
    }

    /**
     * @param $text
     * @return string
     */
    public function decrypt($text)
    {
        if (null == $text)
            return null;

        // To decrypt, split the encrypted data from our IV - our unique separator used was "::"
        list($encrypted_data, $iv) = explode('::', base64_decode($text), 2);
        return openssl_decrypt($encrypted_data, 'aes-256-cbc', $this->secret, 0, $iv);
    }
}

【讨论】:

  • 那么把key放在config.yml里也没什么大不了的吧?
  • 在我看来,把它放在你的 config.yml 文件中是不好的做法,因为这个文件被推送到 Git,所以当你的存储库不是私有的时,每个人都可以看到你的密钥。另一方面,parameters.yml 或 .env 文件不会被推送到 git。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2018-05-31
  • 2017-04-16
相关资源
最近更新 更多