Я разрабатываю веб-приложение с использованием Symfony 3.4 с PHP 7.2 и SQLite db.
Я хочу зашифровать некоторые поля своей сущности с помощью AES-256 с использованием стандартных библиотек - openssl или натрия - но я действительно не уверен, как это сделать правильно, поэтому прошу вашего совета, прежде чем я сделаю много больших ужасных ошибок:
@Federkun, спасибо, это действительно так. Безопасно ли использовать сторонние библиотеки во всех вопросах безопасности? Я не очень доверчивый человек, но я не хочу пропускать совершенно законные библиотеки без уважительной причины.






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