Версія фреймворка: 8.x

Шифрування

Вступ

Шифрувач Laravel використовує OpenSSL для забезпечення шифрування AES-256 та AES-128. Вам настійно рекомендується використовувати вбудовані засоби шифрування Laravel і не намагатися застосовувати власні "доморощені" алгоритми шифрування. Всі зашифровані значення Laravel підписані за допомогою коду автентифікації повідомлень (MAC), так що їх базове значення не може бути змінено після шифрування.

Конфігурація

Перш ніж використовувати шифрувач Laravel, ви повинні встановити akeyваріант у вашомуconfig/app.phpфайл конфігурації. Ви повинні використовуватиphp artisan key:generateкоманда для генерації цього ключа, оскільки ця команда Artisan використовуватиме захищений генератор випадкових байтів PHP для створення вашого ключа. Якщо це значення встановлено неправильно, усі значення, зашифровані 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 UserController extends Controller
{
    /**
     * Store a secret message for the user.
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function storeSecret(Request $request, $id)
    {
        $user = User::findOrFail($id);

        $user->fill([
            'secret' => Crypt::encryptString($request->secret),
        ])->save();
    }
}

Розшифровка значення

Ви можете розшифрувати значення за допомогоюdecryptStringметодCryptфасад. Якщо значення неможливо належним чином розшифрувати, наприклад, коли MAC недійсний, з'явитьсяIlluminate\Contracts\Encryption\DecryptExceptionбуде кинуто:

use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;

try {
    $decrypted = Crypt::decryptString($encryptedValue);
} catch (DecryptException $e) {
    //
}