نسخه:

رمزگذاری

معرفی

خدمات رمزگذاری لاراول یک رابط ساده و راحت برای رمزگذاری و رمزگشایی متن از طریق OpenSSL با استفاده از رمزگذاری AES-256 و AES-128 ارائه می دهد. تمام مقادیر رمزگذاری شده لاراول با استفاده از کد احراز هویت پیام (MAC) امضا می‌شوند تا پس از رمزگذاری، ارزش اصلی آن‌ها قابل تغییر یا دستکاری نباشد.

پیکربندی

قبل از استفاده از رمزگذار لاراول، باید گزینه پیکربندی را در فایل پیکربندی key خود تنظیم کنید. config/app.php این مقدار پیکربندی توسط APP_KEY متغیر محیطی هدایت می شود. شما باید از php artisan key:generate دستور برای تولید مقدار این متغیر استفاده کنید زیرا این key:generate دستور از تولید کننده بایت های تصادفی امن PHP برای ساخت یک کلید امن رمزنگاری برای برنامه شما استفاده می کند. به طور معمول، مقدار متغیر محیطی هنگام نصب لاراول APP_KEY برای شما تولید می شود .

کلیدهای رمزگذاری با چرخش دلپذیر

اگر کلید رمزگذاری برنامه خود را تغییر دهید، تمام جلسات کاربر تأیید شده از برنامه شما خارج می شوند. این به این دلیل است که هر کوکی، از جمله کوکی‌های جلسه، توسط لاراول رمزگذاری می‌شود. علاوه بر این، رمزگشایی هر داده ای که با کلید رمزگذاری قبلی شما رمزگذاری شده است، دیگر امکان پذیر نخواهد بود.

برای کاهش این مشکل، لاراول به شما اجازه می دهد تا کلیدهای رمزگذاری قبلی خود را در متغیر محیطی برنامه خود فهرست کنید APP_PREVIOUS_KEYS . این متغیر ممکن است حاوی لیستی از تمام کلیدهای رمزگذاری قبلی شما باشد که با کاما محدود شده اند:

APP_KEY="base64:J63qRTDLub5NuZvP+kb8YIorGS6qFYHKVo6u7179stY="
APP_PREVIOUS_KEYS="base64:2nLsGFGzyoae2ax3EF2Lyq/hH6QghBGLIq5uL+Gp8/w="

هنگامی که این متغیر محیطی را تنظیم می کنید، لاراول همیشه از کلید رمزگذاری "جاری" هنگام رمزگذاری مقادیر استفاده می کند. با این حال، هنگام رمزگشایی مقادیر، لاراول ابتدا کلید فعلی را امتحان می کند و اگر رمزگشایی با استفاده از کلید فعلی ناموفق باشد، لاراول تمام کلیدهای قبلی را امتحان می کند تا زمانی که یکی از کلیدها بتواند مقدار را رمزگشایی کند.

این رویکرد برای رمزگشایی زیبا به کاربران اجازه می‌دهد تا بدون وقفه از برنامه شما استفاده کنند، حتی اگر کلید رمزگذاری شما چرخانده شود.

با استفاده از رمزگذار

رمزگذاری یک مقدار

می توانید با استفاده از encryptString روش ارائه شده توسط Crypt نما، مقداری را رمزگذاری کنید. تمام مقادیر رمزگذاری شده با استفاده از OpenSSL و رمز AES-256-CBC رمزگذاری می شوند. علاوه بر این، تمام مقادیر رمزگذاری شده با یک کد تأیید اعتبار پیام (MAC) امضا می شوند. کد احراز هویت یکپارچه پیام از رمزگشایی هر مقداری که توسط کاربران مخرب دستکاری شده است جلوگیری می کند:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
 
class DigitalOceanTokenController extends Controller
{
/**
* Store a DigitalOcean API token for the user.
*/
public function store(Request $request): RedirectResponse
{
$request->user()->fill([
'token' => Crypt::encryptString($request->token),
])->save();
 
return redirect('/secrets');
}
}

رمزگشایی یک ارزش

می توانید مقادیر را با استفاده از decryptString روش ارائه شده توسط Crypt نما رمزگشایی کنید. اگر مقدار را نتوان به درستی رمزگشایی کرد، مانند زمانی که کد احراز هویت پیام نامعتبر است، یک علامت Illuminate\Contracts\Encryption\DecryptException پرتاب می شود:

use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
 
try {
$decrypted = Crypt::decryptString($encryptedValue);
} catch (DecryptException $e) {
// ...
}