SecureRandom هي مكتبة PHP لإنشاء أرقام عشوائية آمنة واستخدامها لعمليات التوزيع العشوائي الشائعة مثل خلط المصفوفات أو إنشاء تسلسلات سلسلة مثل كلمات المرور. قبل الإصدار 7.0، لم تكن PHP تحتوي على وظائف عشوائية آمنة، ولكن كان لا يزال من الممكن استخدام مصادر عشوائية مختلفة لتوليد قيم عشوائية آمنة. وبالتالي فإن لهذه المكتبة غرضين رئيسيين:
لا توفر هذه المكتبة أي مولدات بايت عشوائية آمنة إضافية. إنه يستخدم ببساطة مولدات البايت المتوفرة لـ PHP عبر الامتدادات أو داخليًا. المولدات الأربعة المتوفرة عادة لـ PHP هي:
/dev/(u)random
mcrypt_create_iv()
openssl_random_pseudo_bytes()
يعتمد أمان العشوائية التي تولدها هذه المكتبة بشكل كامل على مولد البايت العشوائي الأساسي. لا تقوم المكتبة بأي تحويلات إضافية على البايتات بخلاف التسوية اللازمة لإنشاء توزيعات زوجية للأرقام العشوائية.
وثائق API متاحة على: http://kit.riimu.net/api/securerandom/
OpenSSL
(لاستخدام منشئ OpenSSQL)Mcrypt
(لاستخدام مولد Mcrypt)/dev/urandom
قابلاً للقراءة حتى تتمكن من استخدام منشئ القارئ العشوائي أسهل طريقة لتثبيت هذه المكتبة هي استخدام Composer للتعامل مع تبعياتك. لتثبيت هذه المكتبة عبر Composer، ما عليك سوى اتباع الخطوتين التاليتين:
احصل على composer.phar
عن طريق تشغيل تثبيت سطر أوامر Composer في جذر مشروعك.
بمجرد تشغيل البرنامج النصي للتثبيت، يجب أن يكون لديك ملف composer.phar
.phar في جذر المشروع الخاص بك ويمكنك تشغيل الأمر التالي:
php composer.phar require "riimu/kit-securerandom:^1.3"
بعد تثبيت هذه المكتبة عبر Composer، يمكنك تحميل المكتبة عن طريق تضمين ملف vendor/autoload.php
الذي تم إنشاؤه بواسطة Composer أثناء التثبيت.
إذا كنت على دراية بكيفية استخدام Composer، فيمكنك بدلاً من ذلك إضافة المكتبة باعتبارها تبعية عن طريق إضافة ملف composer.json
التالي إلى مشروعك وتشغيل أمر composer install
:
{
"require" : {
"riimu/kit-securerandom" : " ^1.3 "
}
}
إذا كنت لا ترغب في استخدام Composer لتحميل المكتبة، فيمكنك أيضًا تنزيل المكتبة يدويًا عن طريق تنزيل أحدث إصدار واستخراج المجلد src
إلى مشروعك. يمكنك بعد ذلك تضمين ملف src/autoload.php
المتوفر لتحميل فئات المكتبة.
استخدام المكتبة بسيط للغاية. ما عليك سوى إنشاء مثيل SecureRandom
واستدعاء أي من الطرق لإنشاء قيم عشوائية. على سبيل المثال:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom ();
var_dump ( base64_encode ( $ rng -> getBytes ( 32 ))); // Returns a random byte string
var_dump ( $ rng -> getInteger ( 100 , 1000 )); // Returns a random integer between 100 and 1000
var_dump ( $ rng -> getFloat ()); // Returns a random float between 0 and 1
var_dump ( $ rng -> getRandom ()); // Returns a random float between 0 and 1 (not including 1)
var_dump ( $ rng -> getArray ( range ( 0 , 100 ), 5 )); // Returns 5 randomly selected elements from the array
var_dump ( $ rng -> choose ( range ( 0 , 100 ))); // Returns one randomly chosen value from the array
var_dump ( $ rng -> shuffle ( range ( 0 , 9 ))); // Returns the array in random order
var_dump ( $ rng -> getSequence ( ' 01 ' , 32 )); // Returns a random sequence of 0s and 1s with length of 32
var_dump ( $ rng -> getSequence ([ ' a ' , ' b ' , ' c ' ], 5 )); // Returns an array with 5 elements randomly chosen from 'a', 'b', and 'c'
var_dump ( $ rng -> getUuid ()); // Returns a random version UUID, e.g. '00056a74-036b-47c5-ab35-6f34a41a70ae'
تتوفر الطرق التالية في SecureRandom
لاسترداد العشوائية:
تقوم getBytes($count)
بإرجاع سلسلة من البايتات العشوائية بطول يساوي $count.
تُرجع getInteger($min, $max)
عددًا صحيحًا عشوائيًا بين العددين الصحيحين الموجبين المحددين (شاملاً).
تقوم getFloat()
بإرجاع قيمة تعويم عشوائية بين 0 و1 (ضمنًا).
تقوم getRandom()
بإرجاع قيمة عائمة عشوائية بين 0 و 1 تحتوي على 52 بت من الدقة بحيث تكون القيمة التي يتم إرجاعها دائمًا أقل من 1. بالمقارنة مع getFloat()
، يكون توزيع القيمة أكثر اتساقًا ولا يعتمد على PHP_INT_MAX
.
getArray(array $array, $count)
يُرجع عددًا من العناصر العشوائية من المصفوفة المحددة. العناصر مرتبة عشوائيًا، لكن المفاتيح محفوظة.
choose(array $array)
يُرجع قيمة عشوائية مختارة من المصفوفة.
shuffle(array $array)
يُرجع المصفوفة بترتيب عشوائي. المفاتيح محفوظة.
تقوم getSequence($choices, $length)
بإرجاع تسلسل عشوائي من القيم أو الأحرف. يمكن توفير الاختيارات كسلسلة أو مصفوفة. يعتمد نوع القيمة المرجعة على نوع الاختيارات.
تقوم getUuid()
بإرجاع إصدار عشوائي 4 معرف فريد عالميًا. UUIDs هي معرفات فريدة يمكن إنشاؤها عشوائيًا وبشكل مستقل ولها احتمالية ضئيلة جدًا للتصادم. ومثال UUID يمكن أن يكون 00056a74-036b-47c5-ab35-6f34a41a70ae
.
تستخدم المولدات التي توفرها هذه المكتبة /dev/urandom
كمصدر للعشوائية بشكل افتراضي. القراءة من /dev/random
لا توفر أمانًا إضافيًا لتطبيقات الويب PHP النموذجية وطبيعتها المحظورة ستجعلها غير مناسبة تمامًا لمثل هذه الأغراض.
لا يوجد سوى عدد قليل من الحالات المشروعة التي يجب عليك القراءة من /dev/random
بدلاً من ذلك. هذا غالبًا إذا كنت قلقًا من أن /dev/urandom
لم يتم تصنيفه بشكل صحيح بعد. ومع ذلك، هذا ليس هو الحال عادةً مع تطبيقات الويب، نظرًا لأن هذه المشكلة تظهر فقط عند بدء تشغيل النظام.
إذا كنت تعلم أنك بحاجة ماسة إلى القراءة من /dev/random
فمن الممكن ضبط RandomReader
و Mcrypt
لاستخدامه كمصدر عشوائي بدلاً من ذلك عن طريق تعيين معلمة المنشئ على false وتوفير المولد لـ SecureRandom
في المنشئ. على سبيل المثال:
<?php
require ' vendor/autoload.php ' ;
$ generator = new Riimu Kit SecureRandom Generator RandomReader ( false );
$ rng = new Riimu Kit SecureRandom SecureRandom ( $ generator );
عند إنشاء SecureRandom
، سيحاول استخدام أحد المولدات العشوائية الآمنة المتوفرة، اعتمادًا على المولد الذي يدعمه النظام الأساسي الحالي. تتوفر المصادر العشوائية التالية وسيتم تجربتها بالترتيب التالي:
GeneratorInternal
الوظائف الداخلية المتوفرة في PHP 7.0GeneratorRandomReader
ببساطة بقراءة البايتات من الجهاز العشوائي /dev/urandom
GeneratorMcrypt
mcrypt_create_iv()
لإنشاء بايتات عشوائية باستخدام MCRYPT_DEV_URANDOM
كمصدر.GeneratorOpenSSL
openssl_random_pseudo_bytes()
لإنشاء بايتات عشوائية.كان هناك بعض الجدل حول ما إذا كانت الخوارزمية المستخدمة بواسطة OpenSSL قوية بالفعل من الناحية التشفيرية أم لا. ومع ذلك، نظرًا لعدم وجود أدلة ملموسة ضدها وبسبب الآثار المترتبة على قوتها في دليل PHP، ستستخدم هذه المكتبة OpenSSL كآخر احتياطي افتراضيًا لتحقيق توافق أفضل عبر الأنظمة الأساسية المختلفة.
إذا كنت ترغب في تعريف منشئ البايت بشكل صريح، فيمكنك توفيره كمعلمة منشئة لـ SecureRandom
. على سبيل المثال:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom (
new Riimu Kit SecureRandom Generator Mcrypt ()
);
حقوق الطبع والنشر لهذه المكتبة (c) 2014-2017 محفوظة لـ Riikka Kalliomäki.
راجع الترخيص للحصول على معلومات الترخيص والنسخ.