2016-07-28 28 views
27

Tôi không thể tìm thấy lớp System.Security.Cryptography.RNGCryptoServiceProvider trong .NetCore.RNGCryptoServiceProvider trong .Net Core

Điều quan trọng đối với ứng dụng tôi đang cố gắng chuyển từ .Net Framework, vì nó đang được sử dụng để tạo ra một véc tơ khởi tạo để mã hóa.

Có tồn tại dưới tên khác hoặc có cách nào khác để đạt được chức năng này không?

Trả lời

8

Một trong những giải pháp được đề xuất là sử dụng RandomNumberGenerator.Create() https://github.com/dotnet/corefx/issues/2881

+1

Đây có lẽ là câu trả lời đúng, nhưng bạn cần phải xác định * tại sao * đây là trường hợp. Ví dụ. sao 'RandomNumberGenerator' trả về các số ngẫu nhiên an toàn mã hóa? Và nếu có, tại sao và như thế nào? Lưu ý rằng liên kết chỉ có câu trả lời thường "cau mày". –

44

System.Security.Cryptography.RandomNumberGenerator là lớp cơ sở cho việc triển khai được mã hóa-Secure Pseudo-Random Number Generator (CSPRNG). Trong Khuôn khổ .NET RandomNumberGenerator.Create() trả về phiên bản RNGCryptoServiceProvider (trừ khi được định cấu hình khác nhau theo CryptoConfig). Trong .NET Core RandomNumberGenerator.Create() trả về một kiểu mờ đục dựa trên BCryptGenRandom (Windows) hoặc trình tạo số ngẫu nhiên của OpenSSL (! Windows).

RandomNumberGenerator.Create() là cách duy nhất để có được một cá thể RNG trên .NET Core, và vì nó hoạt động trên cả .NET Core và .NET Framework là di động nhất.

Tất nhiên, nếu bạn đang tạo IV, bạn cũng có thể chỉ cần gọi phương thức thể hiện SymmetricAlgorithm.GenerateIV() để sử dụng CSPRNG trong nội bộ; mặc dù như tài liệu nói, gọi nó là không cần thiết như một IV ngẫu nhiên được tạo ra với các ví dụ (GenerateIV có thể được sử dụng để buộc nó để tạo ra một cái mới trước khi cuộc gọi tiếp theo để CreateEncryptor).

Các vấn đề liên quan