Шифрование

Содержание:


Введение

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


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

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


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

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

Вы можете зашифровать значение используя помощник 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
{
    /**
     * 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' => encrypt($request->secret),
        ])->save();
    }
}

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

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

use Illuminate\Support\Facades\Crypt;

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

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

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

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

use Illuminate\Contracts\Encryption\DecryptException;

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