Шифрование
Содержание:
Введение
Шифровальщик Ларавел использует 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) {
//
}