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

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

איך לעשות:

PowerShell מציע גישה ישירה ליצירת מספרים אקראיים באמצעות ה-cmdlet Get-Random. קומנדלט זה יכול לייצר מספרים אקראיים בתחום ברירת המחדל או בתחום מצוין.

# יצירת מספר אקראי בין 0 לבין Int32.MaxValue
$randomNumber = Get-Random
Write-Output $randomNumber

כדי לציין טווח, השתמש בפרמטרים -Minimum ו-Maximum:

# יצירת מספר אקראי בין 1 ל-100
$randomNumber = Get-Random -Minimum 1 -Maximum 101
Write-Output $randomNumber

לשליטה רבה יותר, ניתן לייצר מופע של הכיתה System.Random:

# שימוש ב-System.Random לסדרה של מספרים
$rand = New-Object System.Random
foreach ($i in 1..5) {
    $randomNumber = $rand.Next(1, 101)
    Write-Output $randomNumber
}

אם נדרשת בחירה אקראית ממערך או אוסף, Get-Random יכול לבחור פריט באופן ישיר:

# בחירה אקראית ממערך
$array = 1..10
$randomItem = Get-Random -InputObject $array
Write-Output $randomItem

צלילה עמוקה

ה-cmdlet Get-Random ב-PowerShell משתמשת בכיתה של .NET System.Random על מנת לייצר מספרים אקראיים פסבדו. הם “פסוֹדו” מכיוון שהם משתמשים באלגוריתמים כדי לייצר רצפים של מספרים שנראים אקראיים בלבד. לרוב היישומים, רמת האקראיות הזו מספקת. עם זאת, למקרים שדורשים אבטחת קריפטוגרפיה, System.Random לא מתאימה בגלל טבעה הצפוי.

PowerShell ו־.NET מציעים את System.Security.Cryptography.RNGCryptoServiceProvider לאקראיות קריפטוגרפית, שהיא מתאימה יותר ליצירת מפתחות הצפנה או פעולות אחרות שרגישות לאבטחה:

# מספרים אקראיים בטוחים קריפטוגרפית
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::new()
$bytes = New-Object byte[] 4
$rng.GetBytes($bytes)
$randomNumber = [BitConverter]::ToInt32($bytes, 0)
Write-Output $randomNumber

למרות ש-Get-Random ו-System.Random מספקים פתרון לצורך רחב באקראיות בכתיבת סקריפטים ולוגיקת יישומים, חשוב לבחור את הכלי הנכון למשימה, במיוחד ביישומים בעלי אוריינטציה אבטחתית שבהם ניבוי יכול להוות פגיעות.