Как обрабатывать ключ AES в Symfony

Я разрабатываю веб-приложение с использованием Symfony 3.4 с PHP 7.2 и SQLite db.

Я хочу зашифровать некоторые поля своей сущности с помощью AES-256 с использованием стандартных библиотек - openssl или натрия - но я действительно не уверен, как это сделать правильно, поэтому прошу вашего совета, прежде чем я сделаю много больших ужасных ошибок:

  1. каковы лучшие практики для хранения ключей и IV?
  2. уместно ли это, если я помещаю его, если он недоступен в веб-браузере? Я думаю поместить их в config.yml, но это неправильно, очень неправильно
  3. какая библиотека более безопасна между openssl и натрием?
github.com/carnage/doctrine-encrypted-column это то, что вы ищете?
Federkun 07.06.2018 21:05

@Federkun, спасибо, это действительно так. Безопасно ли использовать сторонние библиотеки во всех вопросах безопасности? Я не очень доверчивый человек, но я не хочу пропускать совершенно законные библиотеки без уважительной причины.

GoGoLander 08.06.2018 09:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
1 186
1

Ответы 1

Я использую следующий код, в котором мой секрет хранится в parameters.yml, поэтому его не будет видно, если вы отправите его в Git.

/**
 * SecurityHelper.
 *
 * @author Kengy Van Hijfte <[email protected]>
 */
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);
    }
}

Значит, добавить ключ в config.yml - не проблема?

GoGoLander 08.06.2018 17:37

На мой взгляд, это плохая практика - помещать его в файл config.yml, потому что этот файл отправляется в Git, поэтому, когда ваш репозиторий не является частным, каждый может видеть ваш секретный ключ. С другой стороны, файлы parameters.yml или .env не помещаются в git.

Kenchopa 11.06.2018 11:22

Другие вопросы по теме