Theo tài liệu MSDN cho RandomNumberGenerator:RandomNumberGenerator vs RNGCryptoServiceProvider
mã ứng dụng không trực tiếp sử dụng lớp này. Lớp trừu tượng này được cung cấp làm lớp cơ sở cho tất cả các trình tạo số ngẫu nhiên mã hóa.
Để thực hiện trình tạo số ngẫu nhiên mã hóa, hãy sử dụng lớp dẫn xuất RNGCryptoServiceProvider.
Tuy nhiên, tôi đã thấy đoạn mã sau sử dụng trên một vài dịp trong các căn cứ đoạn mã khác nhau:
byte[] bytes = new byte[...];
RandomNumberGenerator rng = RandomNumberGenerator.Create();
rng.GetBytes(bytes);
Đáng chú ý nhất với StackExchange (mà tôi giả định bao gồm SO) và cũng với BCrypt.Net.
Vì vậy, tôi hơi bối rối - loại RandomNumberGenerator
nào là mã trên trả về? Ngoài ra, có một chút sai sót mà một số cơ sở mã là sử dụng RandomNumberGenerator
thay vì RNGCryptoServiceProvider
?
Tôi giả sử RandomNumberGenerator.Create()
đang thực hiện theo mui xe mà tôi hoàn toàn bị thiếu ở đây, nhưng về mặt kỹ thuật (vì đó là lớp trừu tượng) không nên mã trên ném một lỗi?
"* mà cuối cùng sẽ tạo ra một thể hiện của' RNGCryptoServiceProvider' * "- Các tiêu chuẩn cho điều này là gì? Tại sao không phải 'AesCryptoServiceProvider'/'SHA512' /' DAS' vv? Có phải chỉ là phương pháp tương tự với 'RNGCryptoServiceProvider' mà' RandomNumberGenerator' có nghĩa là quyết định nội bộ sẽ sử dụng thuật toán nào dưới mui xe? – James
@James: Về cơ bản, đó là vì đó là trình tạo số ngẫu nhiên duy nhất được thực hiện theo mặc định (xem hệ thống phân cấp thừa kế http://msdn.microsoft.com/en-us/library/42ks8fz1). 'AesCryptuServiceProvider' là một thuật toán mã hóa, không phải là trình tạo số ngẫu nhiên.Trình tạo số ngẫu nhiên không dành riêng cho các thuật toán mã hóa khác nhau. Lý do duy nhất để làm cho nó có thể đăng ký một máy phát điện khác nhau, là ai đó có thể thấy rằng việc thực hiện hiện tại không tạo ra số ngẫu nhiên đủ tốt. – Guffa
D'oh, đó là lỗi của tôi, giả sử tất cả 'CryptoServiceProvider' là của RNG! Vì vậy, thực tế chỉ có một phần thực thi của một phần RNG của khung công tác và đó là 'RNGCryptoServiceProvider', do đó, nó không quan trọng cái nào tôi sử dụng? – James