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

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

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

  2. AES основан на алгоритме Rijndael и до сих пор не преломлен.

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

  4. Blowfish также не прерывается, но медленный и менее популярный.

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

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

Любая помощь очень ценится.

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 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