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