Как зашифровать открытый текст с помощью AES-256 CBC в PHP с помощью OpenSSL?
Я пытаюсь зашифровать конфиденциальные пользовательские данные, такие как личные сообщения, на моем веб-сайте, работающем на php, перед входом в базу данных. Я немного порылся в Интернете и нашел несколько важных вещей, которые нужно запомнить:
Никогда не используйте mcrypt, это вредоносное ПО.
AES основан на алгоритме Рейндаэля и до сих пор не нарушен.
AES также был рекомендован АНБ и использовался в шифровании правительственных данных США, но с тех пор АНБ рекомендует это, есть шанс, что они могут легко проникнуть в мои пользовательские данные.
Иглобрюх тоже был целым, но медленным и менее популярным.
Итак, я решил сначала попробовать с AES-256 cbc. Но я все еще не уверен, не следует ли мне рассмотреть Иглобрюха как лучший вариант. Поэтому любые рекомендации приветствуются.
И моя главная забота заключается в том, как зашифровать данные в php? Я не нахожу хорошего руководства по этому поводу в документации php. Что является ли правильный способ его реализации?
Мы высоко ценим любую помощь.
1 answers
AES-256 (Реализация OpenSSL)
Тебе повезло.
Расширение openssl
содержит несколько довольно простых в использовании методов для AES-256. Шаги, которые вам нужно предпринять, в основном...
- Создайте 256-битный ключ шифрования (его нужно где-то хранить)
$encryption_key = openssl_random_pseudo_bytes(32);
- Создайте "вектор инициализации" (его тоже нужно сохранить для расшифровки, но мы можем добавить его к зашифрованному данные)
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
- шифрование данных с помощью
openssl_encrypt()
openssl_encrypt($data, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
-
$options
может быть установлено в0
для параметров по умолчанию или изменено наOPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
- добавьте вектор инициализации к зашифрованным данным
$encrypted = $encrypted . ':' . $iv;
- извлеките зашифрованные данные и вектор инициализации.
-
explode(':' , $encrypted);
-
- расшифровывать данные с помощью
openssl_decrypt()
openssl_decrypt($encryptedData, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
Включение openssl
openssl_functions()
по умолчанию это расширение недоступно, вы можете включить его в свой файл php.ini
, раскомментировав строку. ;extension=php_openssl.dll
путем удаления ведущего ;