CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 551

551

Chương 14: Mật mã

System.Security.Cryptography.RandomNumberGenerator

. Đây là một lớp trừu tượng mà tất cả

các bộ tạo số ngẫu nhiên cụ thể đều sẽ thừa kế từ nó. Hiện tại, chỉ có một hiện thực là lớp

RNGCryptoServiceProvider

. Lớp này cung cấp một vỏ bọc được-quản-lý cho hàm

CryptGenRandom

của Win32 CryptoAPI, và bạn có thể sử dụng để đổ vào một mảng byte các

giá trị byte ngẫu nhiên.

Các số do

RNGCryptoServiceProvider

sinh ra không thật sự ngẫu nhiên. Tuy

nhiên, chúng “đủ” ngẫu nhiên để đáp ứng yêu cầu cho các ứng dụng mật mã và
bảo mật trong hầu hết các môi trường chính phủ và thương mại.

Lớp cơ sở

RandomNumberGenerator

là một factory cho các lớp hiện thực dẫn xuất từ đó. Gọi

RandomNumberGenerator.Create("System.Security.Cryptography.RNGCryptoServiceProvider")

sẽ trả về một thể hiện của

RNGCryptoServiceProvider

, và bạn có thể sử dụng nó để tạo số

ngẫu nhiên. Ngoài ra, vì

RNGCryptoServiceProvider

là hiện thực duy nhất nên nó sẽ là lớp

mặc định được tạo ra khi bạn gọi phương thức

Create

không có đối số:

RandomNumberGenerator.Create()

.

Ví dụ dưới đây tạo một đối tượng

RNGCryptoServiceProvider

và sử dụng nó để tạo các giá trị

ngẫu nhiên. Phương thức

GetBytes

đổ vào một mảng byte các giá trị byte ngẫu nhiên. Bạn có

thể sử dụng phương thức

GetNonZeroBytes

nếu cần dữ liệu ngẫu nhiên không chứa giá trị

zero.

using System;

using System.Security.Cryptography;

public class SecureRandomNumberExample {

public static void Main() {

// Tạo mảng byte dùng để lưu trữ dữ liệu ngẫu nhiên.

byte[] number = new byte[32];

// Tạo bộ tạo số ngẫu nhiên mặc định.

RandomNumberGenerator rng = RandomNumberGenerator.Create();

// Tạo dữ liệu ngẫu nhiên.

rng.GetBytes(number);

// Hiển thị dữ liệu ngẫu nhiên.

Console.WriteLine(BitConverter.ToString(number));

}

}

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.