Как зашифровать открытый текст с помощью AES-256 CBC в PHP с помощью OpenSSL?


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

  1. Никогда не используйте mcrypt, это вредоносное ПО.

  2. AES основан на алгоритме Рейндаэля и до сих пор не нарушен.

  3. AES также был рекомендован АНБ и использовался в шифровании правительственных данных США, но с тех пор АНБ рекомендует это, есть шанс, что они могут легко проникнуть в мои пользовательские данные.

  4. Иглобрюх тоже был целым, но медленным и менее популярным.

Итак, я решил сначала попробовать с AES-256 cbc. Но я все еще не уверен, не следует ли мне рассмотреть Иглобрюха как лучший вариант. Поэтому любые рекомендации приветствуются.

И моя главная забота заключается в том, как зашифровать данные в php? Я не нахожу хорошего руководства по этому поводу в документации php. Что является ли правильный способ его реализации?

Мы высоко ценим любую помощь.

Author: jww, 2016-01-19

1 answers

AES-256 (Реализация OpenSSL)

Тебе повезло.

Расширение openssl содержит несколько довольно простых в использовании методов для AES-256. Шаги, которые вам нужно предпринять, в основном...

  1. Создайте 256-битный ключ шифрования (его нужно где-то хранить)
    • $encryption_key = openssl_random_pseudo_bytes(32);
  2. Создайте "вектор инициализации" (его тоже нужно сохранить для расшифровки, но мы можем добавить его к зашифрованному данные)
    • $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
  3. шифрование данных с помощью openssl_encrypt()
    • openssl_encrypt($data, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
    • $options может быть установлено в 0 для параметров по умолчанию или изменено на OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
  4. добавьте вектор инициализации к зашифрованным данным
    • $encrypted = $encrypted . ':' . $iv;
  5. извлеките зашифрованные данные и вектор инициализации.
    • explode(':' , $encrypted);
  6. расшифровывать данные с помощью openssl_decrypt()
    • openssl_decrypt($encryptedData, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)

Включение openssl

openssl_functions() по умолчанию это расширение недоступно, вы можете включить его в свой файл php.ini, раскомментировав строку. ;extension=php_openssl.dll путем удаления ведущего ;

PHP - скрипка.

Http://phpfiddle.org/lite/code/9epi-j5v2

 12
Author: Luke, 2017-07-19 01:38:41