Исключение DecryptException
Исключение DecryptException выбрасывается компонентом шифрования Laravel,
когда не удаётся расшифровать данные. Это может произойти при
использовании неверного ключа шифрования, изменении ключа после
шифрования данных, повреждении зашифрованной строки или при
попытке расшифровать данные, зашифрованные другой системой
с другим ключом. Обработка этого исключения важна для
корректной работы приложения при работе с конфиденциальными
данными.
Синтаксис
Исключение DecryptException находится в пространстве имён
Illuminate\Contracts\Encryption\DecryptException.
Оно наследуется от базового класса RuntimeException
и автоматически выбрасывается методами фасада Crypt
или хелпером decrypt при неудачной расшифровке.
<?php
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
// Handle decryption failure
}
?>
Пример
Попробуем расшифровать данные с неверным ключом:
<?php
namespace App\Http\Controllers;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
class DecryptController extends Controller
{
public function testDecrypt()
{
$encrypted = Crypt::encryptString('secret data');
// Simulate key mismatch
config(['app.key' => 'base64:wrongkey1234567890=']);
try {
$decrypted = Crypt::decryptString($encrypted);
echo "Decrypted: " . $decrypted;
} catch (DecryptException $e) {
echo "Decryption failed: " . $e->getMessage();
}
}
}
?>
Результат выполнения кода:
"Decryption failed: The payload is invalid."
Пример
Обработаем исключение при расшифровке данных из базы данных:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
class UserController extends Controller
{
public function showSecret($id)
{
$user = User::find($id);
try {
$secret = Crypt::decryptString($user->secret_field);
echo "User secret: " . $secret;
} catch (DecryptException $e) {
echo "Unable to decrypt user data. Please contact support.";
}
}
}
?>
Результат выполнения кода при успешной расшифровке:
"User secret: password123"
Результат выполнения кода при ошибке расшифровки:
"Unable to decrypt user data. Please contact support."
Пример
Используем глобальный обработчик исключений для всех
DecryptException в приложении:
<?php
namespace App\Exceptions;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
public function render($request, Throwable $e)
{
if ($e instanceof DecryptException) {
return response()->view('errors.decrypt', [
'message' => 'Decryption error occurred'
], 500);
}
return parent::render($request, $e);
}
}
?>
Смотрите также
-
исключение
ValidationException,
которое возникает при ошибках валидации данных -
исключение
QueryException,
которое возникает при ошибках выполнения SQL-запросов -
исключение
AuthenticationException,
которое возникает при ошибках аутентификации -
класс
Handler,
который управляет обработкой всех исключений в приложении