Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức Random.NextBytes() trong C#

Phương thức Random.NextBytes() trong C# được dùng để điền các phần tử của một mảng byte được chỉ định với các số ngẫu nhiên (0-255).

Cú pháp

public virtual void NextBytes(byte[] buffer);
  • buffer: Mảng byte sẽ được điền bằng các số ngẫu nhiên.

Ví dụ 1: Điền mảng byte và so sánh với Next()/Next(int)

using System;

public class Demo
{
    public static void Main()
    {
        Random r = new Random();
        Random r2 = new Random();
        Random r3 = new Random();

        Byte[] arr = new Byte[5];
        r3.NextBytes(arr); // Điền mảng arr

        Console.WriteLine("Các số ngẫu nhiên (Next())......");
        for (int i = 1; i <= 5; i++)
        {
            Console.WriteLine(r.Next());
        }

        Console.WriteLine("\nCác số ngẫu nhiên từ 0 đến 9 (Next(10))......");
        for (int i = 1; i <= 5; i++)
        {
            Console.WriteLine(r2.Next(10));
        }

        Console.WriteLine("\nCác số ngẫu nhiên trong mảng byte (NextBytes).....");
        for (int i = 0; i < arr.GetUpperBound(0); i++)
        {
            Console.WriteLine(arr[i]);
        }
    }
}

Kết quả (ví dụ)

Các số ngẫu nhiên (Next())......
2081486546
329484380
1639318640
1499756340
2122408387

Các số ngẫu nhiên từ 0 đến 9 (Next(10))......
9
1
7
6
9

Các số ngẫu nhiên trong mảng byte (NextBytes)......
210
92
112
52

Ví dụ 2: Mảng byte nhỏ (2 phần tử)

using System;

public class Demo
{
    public static void Main()
    {
        Random r = new Random();
        Byte[] arr = new Byte[2];
        r.NextBytes(arr);

        Console.WriteLine("Các số ngẫu nhiên trong mảng byte.....");
        for (int i = 0; i < 2; i++)
        {
            Console.WriteLine(arr[i]);
        }
    }
}

Kết quả (ví dụ)

Các số ngẫu nhiên trong mảng byte.....
173
11

Ứng dụng thực tế

  • Sinh khóa ngẫu nhiên, salt cho mật mã.
  • Tạo dữ liệu test ngẫu nhiên cho mảng byte.
  • Điền buffer cho network stream, file I/O test.

Lưu ý quan trọng

  • Mỗi byte được điền giá trị từ 0 đến 255 (toàn bộ phạm vi byte).
  • Phương thức sửa đổi mảng tại chỗ (in-place), không trả về mảng mới.
  • Ném ArgumentNullException nếu buffer là null.
  • Tương tự Next(), không dùng cho mục đích mật mã. Dùng RandomNumberGenerator.GetBytes() cho crypto.
  • Instance Random không thread-safe.

Ví dụ sinh salt cho mật khẩu

public static byte[] GenerateSalt(int size = 16)
{
    byte[] salt = new byte[size];
    using (var rng = System.Security.Cryptography.RandomNumberGenerator.Create())
    {
        rng.GetBytes(salt); // An toàn mật mã
    }
    return salt;
}

// Chỉ dùng Random.NextBytes cho test/non-crypto
public static byte[] GenerateTestData(int size)
{
    byte[] data = new byte[size];
    new Random().NextBytes(data);
    return data;
}