Sinh số ngẫu nhiên

PowerShell:
Sinh số ngẫu nhiên

Cách thực hiện:

PowerShell cung cấp một cách thẳng thắn để tạo số ngẫu nhiên bằng cách sử dụng cmdlet Get-Random. Cmdlet này có thể sản xuất ra số ngẫu nhiên trong phạm vi mặc định hoặc một phạm vi được chỉ định.

# Tạo một số ngẫu nhiên giữa 0 và Int32.MaxValue
$randomNumber = Get-Random
Write-Output $randomNumber

Để chỉ định một phạm vi, sử dụng các tham số -Minimum-Maximum:

# Tạo một số ngẫu nhiên giữa 1 và 100
$randomNumber = Get-Random -Minimum 1 -Maximum 101
Write-Output $randomNumber

Để kiểm soát nhiều hơn, bạn có thể tạo một đối tượng của lớp System.Random:

# Sử dụng System.Random cho một chuỗi các số
$rand = New-Object System.Random
foreach ($i in 1..5) {
    $randomNumber = $rand.Next(1, 101)
    Write-Output $randomNumber
}

Nếu bạn cần một lựa chọn ngẫu nhiên từ một mảng hoặc bộ sưu tập, Get-Random có thể trực tiếp chọn một mục:

# Lựa chọn ngẫu nhiên từ một mảng
$array = 1..10
$randomItem = Get-Random -InputObject $array
Write-Output $randomItem

Sâu hơn

Cmdlet Get-Random trong PowerShell sử dụng lớp .NET System.Random bên dưới để tạo ra các số giả ngẫu nhiên. Chúng được gọi là “giả” vì chúng sử dụng các thuật toán để sản xuất các chuỗi số chỉ trông như ngẫu nhiên. Đối với hầu hết các ứng dụng, mức độ ngẫu nhiên này là đủ. Tuy nhiên, đối với các trường hợp sử dụng cần đến bảo mật mật mã học, System.Random không phù hợp do bản chất có thể dự đoán của nó.

PowerShell và .NET cung cấp System.Security.Cryptography.RNGCryptoServiceProvider cho tính ngẫu nhiên mật mã học, phù hợp hơn cho việc tạo khóa mã hóa hoặc các hoạt động nhạy cảm với bảo mật khác:

# Số ngẫu nhiên bảo mật mật mã học
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::new()
$bytes = New-Object byte[] 4
$rng.GetBytes($bytes)
$randomNumber = [BitConverter]::ToInt32($bytes, 0)
Write-Output $randomNumber

Trong khi Get-RandomSystem.Random đáp ứng một tập hợp rộng lớn các nhu cầu về ngẫu nhiên trong viết script và lô-gíc ứng dụng, việc chọn công cụ đúng cho công việc là thiết yếu, đặc biệt là trong các ứng dụng tập trung vào bảo mật nơi sự dự đoán có thể là một lỗ hổng.