Mohammad Yousef3 نشر 29 مارس 2021 أرسل تقرير نشر 29 مارس 2021 كيف يمكنني إنشاء كلمات سر مشفرة كتلك المستخدمة في authentication المدعوم بواسطة لارافل ؟ اقتباس
2 سامح أشرف نشر 30 مارس 2021 أرسل تقرير نشر 30 مارس 2021 يوجد نوعين من خوازرميات التشفير، الأول تشفير في إتجاه واحد، أي يتم تشفير النصوص ولا يمكن فك تشفيرها عمليًا ومن هذه الخوارزميات SHA-256 و md5 و bcrypt التي يستعملها Laravel في حفظ كلمات المرور، ويمكن إستخدامها بشكل مباشر عبر دالة bcrypt: $password = "secret"; $hashed_password = bcrypt($password); // $2y$12$j50r.d/Db1HE.lR4TkTbP.lCGlsMjP7NMQDLP.jE1x9kqz7Ltwyr2 ويمكن التأكد من صحة كلمة المرور فيما بعد عبر Hash:check if (Hash::check('plain-text-password', $hashed_password)) { // The passwords match... } أما النوع الثاني فهو التشفير في إتجاهين، أي يمكن تشفير النصوص وفك تشفيرها عبر كلمة سر معينة تسمى مفتاح فك التشفير وتكون هي نفسها قيمة الخاصية APP_KEY في ملف env، يوفر Laravel خدمة تشفير Laravel's encrypter عبر OpenSSL بإستخدام الخوارزميات AES-256 وAES-128 وكل القيم التي يتم تشفيرها يتم تسجيلها بكود مصادقة MAC، بحيث لا يمكن تعديل قيمتها الأساسية أو العبث بها بمجرد تشفيرها. ملاحظة: لا تستخدم أبدًا هذه الطريقة لتشفير كلمات المرور وذلك لأنه يمكن فك تشفيرها بمجرد معرفة قيمة APP_KEY، وقد حدثت الكثير من عمليات الإختراق في عشرات المواقع لأسباب مشابهة، وإنما تستعمل هذه الطريقة في تشفير القيم التي تحتاجها في وقت لاحق مثل API Tokens. للبدء في تشفير القيم يمكنك أن تستخدم دالة encryptString التي يوفرها الصنف Illuminate\Support\Facades\Crypt، وهنا مثال من وثائق Laravel الرسمية: <?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 من نفس الصنف لفك تشفير النصوص، وفي حالة حدوث خطأ سيتم إطلاق خطأ من نوع Illuminate\Contracts\Encryption\DecryptException، مثال: use Illuminate\Contracts\Encryption\DecryptException; use Illuminate\Support\Facades\Crypt; try { $decrypted = Crypt::decryptString($encryptedValue); } catch (DecryptException $e) { return Redirect::back()->withErrors(['msg', 'Invalid decryption key']); } بالتوفيق. 2 اقتباس
0 Waleed Alfakiat نشر 29 مارس 2021 أرسل تقرير نشر 29 مارس 2021 يتم تشفير كلمات السر في Laravel عن طريق الدالة bcrypt(); ويتم تمرير كلمة المرور الغير مشفرة إليها وتعمل على تشفيرها وإعادتها بالشكل الجديد $password = bcrypt('hsoub'); 1 اقتباس
0 بلال زيادة نشر 30 مارس 2021 أرسل تقرير نشر 30 مارس 2021 يمكنك استخدام Hash, في إعلى المتحكم يمكنك وضع use Hash; وعند تشفير كلمة المرور يمكنك وضع $password = Hash::make($password); اقتباس
السؤال
Mohammad Yousef3
كيف يمكنني إنشاء كلمات سر مشفرة كتلك المستخدمة في authentication المدعوم بواسطة لارافل ؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.