{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11}} == Введение == Шифратор Laravel использует OpenSSL для шифрования по алгоритмам %%(t)AES-256%% и %%(t)AES-128%%. Настоятельно призываем вас использовать встроенные в Laravel возможности шифрования и не пытаться применять свои "самодельные" алгоритмы шифрования. Все шифрованные значения подписаны кодом аутентификации сообщения (MAC - message authentication code) для предотвращения любых изменений в зашифрованной строке. == Настройка == Перед использованием шифрования Laravel обязательно задайте ключ **key** в файле %%(t)config/app.php%%. Для этого вам надо использовать команду %%(sh)php artisan key:generate%%, которая использует надёжный генератор случайных байтов PHP для создания вашего ключа. Иначе все зашифрованные значения не будут безопасными. == Использование шифратора == **Шифрование значения** Вы можете зашифровать значение с помощью вспомогательной функции %%encrypt()%% (в версии 5.2 и ранее используется метод %%encrypt()%% ((/docs/v5/facades фасада)) %%(t)Crypt%%). Все значения шифруются с помощью OpenSSL и шифра AES-256-CBC. Более того, все шифрованные значения подписаны кодом аутентификации сообщения (MAC — message authentication code) для обнаружения любых изменений в зашифрованной строке: %% fill([ 'secret' => encrypt($request->secret) //для версии 5.2 и ранее: //'secret' => Crypt::encrypt($request->secret) ])->save(); } } %% .(alert) При шифровании значения подвергаются "сериализации", что позволяет шифровать объекты и массивы. Поэтому при получении шифрованных значений клиентам "без PHP" необходимо будет "десериализовать" данные. **Расшифровка значения** Вы можете расшифровать значение при помощи вспомогательной функции %%decrypt()%% (в версии 5.2 и ранее - метод %%decrypt()%% фасада %%(t)Crypt%%). Если значение не может быть корректно расшифровано, например, при неверном MAC, будет выброшено исключение %%(t)Illuminate\Contracts\Encryption\DecryptException%%: %% use Illuminate\Contracts\Encryption\DecryptException; try { $decrypted = decrypt($encryptedValue); //для версии 5.2 и ранее: //$decrypted = Crypt::decrypt($encryptedValue); } catch (DecryptException $e) { // } %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Laravel предоставляет средства для надёжного шифрования по алгоритму ((ВП:AES)) с помощью расширения ((phpdoc:book.mcrypt mcrypt)) для PHP. **Шифрование строки** ~%% $encrypted = Crypt::encrypt('секрет'); ~%% **Расшифровка строки** ~%% $decrypted = Crypt::decrypt($encryptedValue); ~%% **Изменение алгоритма и режима шифрования** ~%% Crypt::setMode('ctr'); Crypt::setCipher($cipher); ~%% %%