Может войдёшь?
Черновики Написать статью Профиль

Шифрование

перевод документация 5.х

  1. 1. Введение
  2. 2. Настройка
  3. 3. Использование шифратора
Этот перевод актуален для англоязычной документации на (ветка 5.3) , (ветка 5.2) , (ветка 5.1) и (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.

Введение

Шифратор 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
<?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:

PHP
use Illuminate\Contracts\Encryption\DecryptException;

try {
  
$decrypted decrypt($encryptedValue);
  
//для версии 5.2 и ранее:
  //$decrypted = Crypt::decrypt($encryptedValue);
} catch (DecryptException $e) {
  
//
}
+ 5.0

добавлено в 5.0 ()

Laravel предоставляет средства для надёжного шифрования по алгоритму AES с помощью расширения mcrypt для PHP.

Шифрование строки

PHP
$encrypted Crypt::encrypt('секрет');

Расшифровка строки

PHP
$decrypted Crypt::decrypt($encryptedValue);

Изменение алгоритма и режима шифрования

PHP
Crypt::setMode('ctr');

Crypt::setCipher($cipher);

Комментарии (1)

Voody

Насколько увеличивается размер поля при шифровании?

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.