Unetway

Laravel - Encryption

Вступление

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

 

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

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

 

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

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

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

<?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помощника. Если значение не может быть правильно расшифровано, например, когда MAC недействителен, будет сгенерировано:Illuminate\Contracts\Encryption\DecryptException

use Illuminate\Contracts\Encryption\DecryptException;

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