1. Безопасность
  2. Шифрование

Присоединяйся к нашему Telegram сообществу @webblend!

Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.

Введение

Сервисы шифрования 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.

Использование 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) {
// ...
}