رمزگذاری
معرفی
رمزگذار لاراول از 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) { //}