رمزگذاری
معرفی
خدمات رمزگذاری لاراول یک رابط ساده و راحت برای رمزگذاری و رمزگشایی متن از طریق OpenSSL با استفاده از رمزگذاری AES-256 و AES-128 ارائه می دهد. تمام مقادیر رمزگذاری شده لاراول با استفاده از کد احراز هویت پیام (MAC) امضا میشوند تا پس از رمزگذاری، ارزش اصلی آنها قابل تغییر یا دستکاری نباشد.
پیکربندی
قبل از استفاده از رمزگذار لاراول، باید گزینه پیکربندی را در
فایل پیکربندی
key
خود تنظیم کنید.
config/app.php
این مقدار پیکربندی توسط
APP_KEY
متغیر محیطی هدایت می شود. شما باید از
php artisan key:generate
دستور برای تولید مقدار این متغیر استفاده کنید زیرا این
key:generate
دستور از تولید کننده بایت های تصادفی امن PHP برای ساخت یک کلید امن
رمزنگاری برای برنامه شما استفاده می کند. به طور معمول، مقدار متغیر محیطی هنگام
نصب لاراول
APP_KEY
برای شما تولید می شود
.
با استفاده از رمزگذار
رمزگذاری یک مقدار
می توانید با استفاده از
encryptString
روش ارائه شده توسط
Crypt
نما، مقداری را رمزگذاری کنید. تمام مقادیر رمزگذاری شده با استفاده از
OpenSSL و رمز AES-256-CBC رمزگذاری می شوند. علاوه بر این، تمام مقادیر رمزگذاری شده با یک کد تأیید اعتبار
پیام (MAC) امضا می شوند. کد احراز هویت یکپارچه پیام از رمزگشایی هر مقداری که توسط کاربران مخرب دستکاری شده
است جلوگیری می کند:
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller;use App\Models\User;use Illuminate\Http\Request;use Illuminate\Support\Facades\Crypt; class DigitalOceanTokenController extends Controller{ /** * Store a DigitalOcean API token for the user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function storeSecret(Request $request) { $request->user()->fill([ 'token' => Crypt::encryptString($request->token), ])->save(); }}
رمزگشایی یک مقدار
می توانید مقادیر را با استفاده از
decryptString
روش ارائه شده توسط
Crypt
نما رمزگشایی کنید. اگر مقدار را نتوان به درستی رمزگشایی کرد، مانند زمانی
که کد احراز هویت پیام نامعتبر است، یک علامت
Illuminate\Contracts\Encryption\DecryptException
پرتاب می شود:
use Illuminate\Contracts\Encryption\DecryptException;use Illuminate\Support\Facades\Crypt; try { $decrypted = Crypt::decryptString($encryptedValue);} catch (DecryptException $e) { //}