גילוי מספרים אקראיים

PHP:
גילוי מספרים אקראיים

איך:

-PHP מציע כמה פונקציות ליצירת מספרים אקראיים, אך המשמשות ביותר הן rand(), mt_rand(), ולמטרות קריפטוגרפיות, random_int().

ליצירת מספר אקראי פשוט בין 0 ל-getrandmax() (הערך הגדול ביותר שrand() יכול להחזיר), ניתן להשתמש ב:

echo rand();

לטווח מסוים יותר, כמו בין 1 ל-100:

echo rand(1, 100);

עם זאת, mt_rand() הוא בחירה טובה יותר מבחינת מהירות ואקראיות:

echo mt_rand(1, 100);

הפלט לשניהם יכול להיות כל דבר בין 1 ל-100, תלוי ברנדומליזציה, לדוגמה, 42.

להקשרים קריפטוגרפיים או בטיחותיים, שבהם הבלתי צפיות היא קריטית, random_int() הוא הבחירה המועדפת כיוון שהיא מייצרת מספרים שלמים פסאודו-אקראיים קריפטוגרפיים בטוחים:

echo random_int(1, 100);

שוב, הפלט הוא מספר אקראי בין 1 ל-100, כמו 84, אך עם ערובה חזקה יותר של אקראיות.

צלילה עמוקה

הפונקציה rand() הייתה נוכחת ב-PHP מאז הגרסאות הראשונות שלה, כשיטה התחלתית ליצירת מספרים אקראיים. עם זאת, היא אינה הבחירה הטובה ביותר ליישומים הדורשים דרגת אקראיות גבוהה עקב האלגוריתם היחסית צפוי שלה.

mt_rand(), שהוצגה ב-PHP 4, מבוססת על האלגוריתם ה-Mersenne Twister - רחוק לעלות במהירות ובאקראיות שהיא יכולה לייצר לעומת rand(). היא מהר מאוד הפכה לאפשרות המועדפת לרוב הצרכים הלא-קריפטוגרפיים.

ליישומים רגישים מבחינת בטיחות, random_int() הוצגה ב-PHP 7 כדי לייצר מספרים שלמים פסאודו-אקראיים קריפטוגרפיים בטוחים באמצעות בתים אקראיים מגנרטור המספרים האקראיים של המערכת. היא בהרבה יותר בטוחה מ-rand() או mt_rand(), מה שהופך אותה לבחירה הטובה ביותר ליצירת אסימונים, מפתחות, או יסודות אחרים שבהם צפיות עלולה להוביל לחולשות באבטחה.

למרות השיפורים האלה, חיוני לבחור את הפונקציה הנכונה בהתבסס על הקשר של היישום. לשימוש כללי, mt_rand() מספיקה, אך לכל דבר שעשוי להיות ממוקד או להינצל, random_int() היא הדרך לבחור, מספקת גם אקראיות וגם בטיחות.