Шифрование

Настройка

Перед использованием шифрования в Laravel, вы должны указать опцию key в вашем конфигурационном файле config/app.php, которая должна состоять из 32 символов (случайный набор символов). Если это значение не задано или задано неправильно, то все значения, зашифрованные с помощью Laravel будут не безопасными.

Основы использования

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

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

Например, мы можем использовать метод encrypt для шифрования секретных данных и сохранить их в модели Eloquent:

<?php

namespace App\Http\Controllers;

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

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::encrypt($request->secret)
        ])->save();
    }
}

Примечание: Зашифрованные значения проходят сериализацию serialize во время шифрования, что позволяет нам шифровать объекты и массивы. Таким образом не-PHP клиентам, которые получают шифрованные данные, понадобится десериализовать данные.

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

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

use Illuminate\Contracts\Encryption\DecryptException;

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