Класс Crypt
Класс Crypt используется для шифрования и дешифрования данных в Laravel. Он использует механизм шифрования AES-256-CBC, который обеспечивает высокий уровень безопасности. Класс автоматически генерирует уникальный идентификатор (IV) для каждой операции шифрования и подписывает данные HMAC-кодом для предотвращения их подделки. Для работы класса в файле .env должен быть установлен ключ APP_KEY.
Основные методы класса: encrypt для шифрования данных, decrypt для дешифрования, encryptString для шифрования строк и decryptString для дешифрования строк. Методы encryptString и decryptString работают аналогично основным методам, но гарантируют, что на вход и выход передаются именно строковые значения.
Синтаксис
<?php
use Illuminate\Support\Facades\Crypt;
// Шифрование данных
$encrypted = Crypt::encrypt($data);
// Дешифрование данных
$decrypted = Crypt::decrypt($encrypted);
// Шифрование строки
$encryptedString = Crypt::encryptString($string);
// Дешифрование строки
$decryptedString = Crypt::decryptString($encryptedString);
?>
Пример использования метода encrypt
Давайте зашифруем строку 'secret data' с помощью метода encrypt:
<?php
use Illuminate\Support\Facades\Crypt;
$res = Crypt::encrypt('secret data');
echo $res;
?>
Результат выполнения кода:
"eyJpdiI6ImV4YW1wbGVJZCIsInZhbHVlIjoiZXhhbXBsZVZhbHVlIiwibWFjIjoiZXhhbXBsZU1hYyJ9"
Метод возвращает зашифрованную строку в формате Base64, которая содержит зашифрованные данные, вектор инициализации и HMAC-подпись.
Пример использования метода decrypt
Давайте расшифруем данные, полученные от метода encrypt:
<?php
use Illuminate\Support\Facades\Crypt;
$encrypted = Crypt::encrypt('secret data');
$res = Crypt::decrypt($encrypted);
echo $res;
?>
Результат выполнения кода:
"secret data"
Метод decrypt принимает зашифрованную строку и возвращает исходные данные. Если зашифрованные данные были изменены или ключ не соответствует, метод выбросит исключение Illuminate\Contracts\Encryption\DecryptException.
Пример использования методов encryptString и decryptString
Методы encryptString и decryptString работают аналогично основным методам, но гарантируют, что переданные данные являются строками:
<?php
use Illuminate\Support\Facades\Crypt;
$encrypted = Crypt::encryptString('user@example.com');
$res = Crypt::decryptString($encrypted);
echo $res;
?>
Результат выполнения кода:
"user@example.com"
Эти методы удобно использовать для шифрования конфиденциальных строковых данных, таких как email-адреса, пароли или токены.
Пример шифрования данных в контроллере
Давайте создадим контроллер, который шифрует и дешифрует данные пользователя:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Crypt;
class UserController extends Controller
{
public function encryptData()
{
$userData = [
'name' => 'John Doe',
'email' => 'john@example.com',
'id' => 12345
];
$encrypted = Crypt::encrypt($userData);
return response()->json(['encrypted' => $encrypted]);
}
public function decryptData($encrypted)
{
$decrypted = Crypt::decrypt($encrypted);
return response()->json(['decrypted' => $decrypted]);
}
}
?>