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
ArgumentNullExceptionnếubufferlà null. - Tương tự
Next(), không dùng cho mục đích mật mã. DùngRandomNumberGenerator.GetBytes()cho crypto. - Instance
Randomkhô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;
}