Шифрование
Введение
Службы шифрования Laravel предоставляют простой и удобный интерфейс для шифрования и дешифрования текста через OpenSSL с использованием шифрования AES-256 и AES-128. Все зашифрованные значения Laravel подписаны с использованием кода аутентификации сообщения (MAC), поэтому их базовое значение нельзя изменить или подделать после шифрования.
Конфигурация
Прежде чем использовать шифратор Laravel, вы должны установить параметр конфигурации key
в вашем файле конфигурации config/app.php
. Это значение конфигурации определяется переменной среды APP_KEY
. Вы должны использовать команду php artisan key:generate
, чтобы сгенерировать значение этой переменной, так как команда key:generate
будет использовать безопасный генератор случайных байтов PHP для создания криптографически безопасного ключа для вашего приложения. Как правило, значение переменной среды APP_KEY
будет сгенерировано для вас во время установки Laravel.
Использование шифровальщика
Шифрование значения
Вы можете зашифровать значение, используя метод encryptString
, предоставляемый фасадом Crypt
. Все зашифрованные значения шифруются с использованием OpenSSL и шифра AES-256-CBC. Кроме того, все зашифрованные значения подписаны кодом аутентификации сообщения (MAC). Встроенный код аутентификации сообщений предотвратит расшифровку любых значений, которые были изменены злоумышленниками:
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller;use App\Models\User;use Illuminate\Http\Request;use Illuminate\Support\Facades\Crypt; class DigitalOceanTokenController extends Controller{ /** * Store a DigitalOcean API token for the user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function storeSecret(Request $request) { $request->user()->fill([ 'token' => Crypt::encryptString($request->token), ])->save(); }}
Расшифровка значения
Вы можете расшифровать значения, используя метод decryptString
, предоставляемый фасадом Crypt
. Если значение не может быть правильно расшифровано, например, когда код аутентификации сообщения недействителен, будет выдано исключение Illuminate\Contracts\Encryption\DecryptException
:
use Illuminate\Contracts\Encryption\DecryptException;use Illuminate\Support\Facades\Crypt; try { $decrypted = Crypt::decryptString($encryptedValue);} catch (DecryptException $e) { //}