Вступление
Шифратор Laravel использует OpenSSL для обеспечения шифрования AES-256 и AES-128. Настоятельно рекомендуется использовать встроенные средства шифрования Laravel и не пытаться использовать алгоритмы шифрования собственного производства. Все зашифрованные значения Laravel подписываются с использованием кода аутентификации сообщений (MAC), поэтому их базовое значение не может быть изменено после шифрования.
Конфигурация
Перед использованием шифратора Laravel вы должны установить key
опцию в вашем файле конфигурации. Вы должны использовать команду для генерации этого ключа, так как эта команда Artisan будет использовать безопасный генератор случайных байтов PHP для создания вашего ключа. Если это значение не установлено должным образом, все значения, зашифрованные Laravel, будут небезопасными.config/app.php
php 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) {
//
}
0 комментариев