Введение
Шифратор Laravel использует OpenSSL для шифрования по алгоритмам AES-256 и AES-128. Настоятельно призываем вас использовать встроенные в Laravel возможности шифрования и не пытаться применять свои «самодельные» алгоритмы шифрования. Все шифрованные значения подписаны кодом аутентификации сообщения (MAC — message authentication code) для предотвращения любых изменений в зашифрованной строке.
Настройка
Перед использованием шифрования Laravel обязательно задайте ключ key в файле config/app.php. Для этого вам надо использовать команду shphp artisan key:generate
, которая использует надёжный генератор случайных байтов PHP для создания вашего ключа. Иначе все зашифрованные значения не будут безопасными.
Использование шифратора
Вы можете зашифровать значение с помощью вспомогательной функции PHPencrypt()
(в версии 5.2 и ранее используется метод PHPencrypt()
фасада Crypt). Все значения шифруются с помощью OpenSSL и шифра AES-256-CBC. Более того, все шифрованные значения подписаны кодом аутентификации сообщения (MAC — message authentication code) для обнаружения любых изменений в зашифрованной строке:
<?php
namespace App\Http\Controllers;
//для версии 5.2 и ранее:
//use Crypt;
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)
//для версии 5.2 и ранее:
//'secret' => Crypt::encrypt($request->secret)
])->save();
}
}
При шифровании значения подвергаются «сериализации», что позволяет шифровать объекты и массивы. Поэтому при получении шифрованных значений клиентам «без PHP» необходимо будет «десериализовать» данные.
Вы можете расшифровать значение при помощи вспомогательной функции PHPdecrypt()
(в версии 5.2 и ранее — метод PHPdecrypt()
фасада Crypt). Если значение не может быть корректно расшифровано, например, при неверном MAC, будет выброшено исключение Illuminate\Contracts\Encryption\DecryptException:
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = decrypt($encryptedValue);
//для версии 5.2 и ранее:
//$decrypted = Crypt::decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}
добавлено в 5.0 ()
Комментарии (1)
Насколько увеличивается размер поля при шифровании?