نسخه:

رمزگذاری

معرفی

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

پیکربندی

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

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

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

می توانید یک مقدار را با استفاده از encrypt کمک کننده رمزگذاری کنید. تمام مقادیر رمزگذاری شده با استفاده از OpenSSL و AES-256-CBC رمزگذاری رمزگذاری شده است. علاوه بر این، تمام مقادیر رمزگذاری شده با یک کد احراز هویت پیام (MAC) امضا می شوند تا هرگونه تغییر در رشته رمزگذاری شده را شناسایی کنند:

<?php
 
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
 
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) {
//
}