Поддержите проект сделав пожертвование.
Будьте в курсе последних новостей!
Будьте в курсе последних новостей!

Шифрование

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 10.x. Почему это важно?

Введение

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

Настройка

Перед использованием шифрования Laravel обязательно задайте ключ key в конфиге config/app.php. Для этого вам надо использовать команду php artisan key:generate, которая использует надёжный генератор случайных чисел для создания вашего ключа. Без этого ключа все зашифрованные Laravel значения не будут безопасными.

Использование шифратора

Шифрование значения

Вы можете зашифровать значение с помощью хелпера encrypt. Все значения шифруются с помощью OpenSSL и шифра AES-256-CBC. Более того, все шифрованные значения подписаны кодом аутентификации сообщения (MAC) для обнаружения любых изменений в зашифрованной строке:

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Сохранение секретного сообщения для пользователя.
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function storeSecret(Request $request, $id)
    {
        $user = User::findOrFail($id);

        $user->fill([
            'secret' => encrypt($request->secret)
        ])->save();
    }
}

Шифрование без сериализации

При шифровании значения подвергаются “сериализации”, что позволяет шифровать объекты и массивы. Поэтому при получении шифрованных значений не-PHP клиентам необходимо будет “десериализовать” данные. Если вы хотите зашифровать и расшифровать данные без сериализации, то можете использовать методы encryptString и decryptString фасада Crypt:

use Illuminate\Support\Facades\Crypt;

$encrypted = Crypt::encryptString('Hello world.');

$decrypted = Crypt::decryptString($encrypted);

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

Вы можете расшифровать значение при помощи хелпера decrypt. Если значение не может быть корректно расшифровано, например, при неверном MAC, будет выброшено исключение Illuminate\Contracts\Encryption\DecryptException:

use Illuminate\Contracts\Encryption\DecryptException;

try {
    $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
    //
}