128-битное шифрование PHP

128-битное шифрование — это один из самых безопасных методов шифрования, используемых в большинстве современных алгоритмов и технологий шифрования.

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

128-битное шифрование реализовано в большинстве сетевых/интернет-коммуникационных технологий, таких как веб-браузеры и веб-сайты. Advanced Encryption Standard (AES) — это популярный алгоритм шифрования, поддерживающий 128-битное шифрование. Этот одобренный агентством национальной безопасности (АНБ) протокол шифрования использует симметричное шифрование для преобразования обычного текста в зашифрованный текст с использованием десяти раундов преобразования.

Симметричное шифрование – это алгоритм шифрования, в котором используется один и тот же криптографический ключ как для шифрования данных, так и для расшифровки данных. Рассмотрим на примере языка PHP шифрование данных симметричным методом на основе алгоритма AES (Advanced Encryption Standard) – симметричного алгоритма блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит). Пока AES является одним из самых распространённых алгоритмов симметричного шифрования.

256-битный ключ для шифрования

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

$bytes = openssl_random_pseudo_bytes(32);

$key = bin2hex($bytes);

var_dump($key);

На экран будет выведен результат примерно такого вида:

string(64) "7443c6c3a15937a326938e6668018a6d0389d9d6f30a9fc3dae2a28671ad33e8"

Мы получили 256-битный ключ для шифрования и дальше будем использовать его как секретный ключ шифрования и дешифрования данных (он должен храниться в тайне). Запишем его в переменную $key:

$key = "7443c6c3a15937a326938e6668018a6d0389d9d6f30a9fc3dae2a28671ad33e8";

128-битное шифрование данных

Теперь определим, что мы будем шифровать. Для примера возьмем обычную строку:

$data = 'Строка';

Мы будем шифровать данные алгоритмом AES с 256-битным ключом:

$method = "AES-256-CBC";

Другие доступные методы шифрования можно посмотреть следующим образом:

var_dump(openssl_get_cipher_methods());

Для 128-битного шифрования PHP рекомендуется использовать инициализирующий вектор. Вы можете считать его вторым ключом для шифрования. Можно не задавать его при шифровании данных, но, как вы понимаете, безопасность такого шифрования будет ниже. В этом случае будет получена ошибка уровня E_WARNING:

Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in...on line...

Для начала определим длину инициализирующего вектора:

$ivlen = openssl_cipher_iv_length($method);

Затем и сам инициализирующий вектор:

$iv = openssl_random_pseudo_bytes($ivlen);

Как и 256-битный ключ для шифрования, инициализирующий вектор вам надо сохранить и держать в секрете.

Имея данные для шифрования $data, выбранный метод $method, секретный ключ $key и инициализирующий вектор $iv в PHP симметричное шифрование данных мы можем осуществить с помощью функции openssl_encrypt:

$encrypted = openssl_encrypt($data, $method, $key, $options=OPENSSL_RAW_DATA, $iv);

Можно также преобразовать полученный результат в шестнадцатеричное представление, например для отправки по сети:

$ciphertext = bin2hex($encrypted);

Выведем на экран результат:

var_dump($ciphertext);

string(64) "555b2e4e837e2634a7bf574cc22ed1e3eb304115c772d53d9088033626721ce5"

Важно отметить, что инициализирующий вектор легче сохранить в шестнадцатеричном виде. Для этого используется функция bin2hex, а чтобы опять использовать инициализирующий вектор для шифрования (расшифровки) в функции openssl_encrypt (openssl_decrypt) проведите обратное преобразование функцией hex2bin.

Думаете использовать хеширование на сайте? Тогда статья хеширование SHA будет для вас интересна.

Помимо шифрования на сайте, важно иметь инструмент мониторинга доступности сайта. Какова бы ни была причина, по которой страница сайта не открывается, например DDoS-атаки или вирусы, важно контролировать доступность сайта для посетителя. Ситуация, при которой пользователь не может открыть страницу вашего сайта, отрицательно влияет на поднятие сайта в поиске (поисковой выдаче) и оставляет негативное впечатление о вашем сайте у посетителя. Вы теряете потенциальных клиентов, а значит и деньги. Используйте хороший сервис, например BAILRY для постоянного контроля (проверки) доступности сайта. Сервис предоставляет как бесплатную регулярную (периодическую) проверку доступности сайта, так и платную услугу - для постоянного контроля доступности сайта.

Компания Mainton - разработка программного обеспечения под заказ, SEO и реклама в интернете с 2004 года.