2016-07-28 2 views
27

Я не могу найти класс System.Security.Cryptography.RNGCryptoServiceProvider в .NetCore.RNGCryptoServiceProvider .Net Core

Важно, чтобы приложение, которое я пытаюсь выполнить, переносит из .Net Framework, поскольку он используется для генерации вектора инициализации для шифрования.

Существует ли это под другим именем или существует другой способ достижения этой функциональности?

ответ

8

Одним из решений, предложенных заключается в использовании RandomNumberGenerator.Create() https://github.com/dotnet/corefx/issues/2881

+1

Возможно, это правильный ответ, но вам нужно указать * почему * это так. Например. «RandomNumberGenerator» возвращает криптографически безопасные случайные числа? И если да, то почему и как? Обратите внимание, что ссылки только на ответы, как правило, «нахмурились». –

44

System.Security.Cryptography.RandomNumberGenerator является базовым классом для криптографической-Secure реализациях Псевдо-генератор случайных чисел (CSPRNG). В .NET Framework RandomNumberGenerator.Create() возвращает экземпляр RNGCryptoServiceProvider (если не настроено по-другому на CryptoConfig). В .NET Core RandomNumberGenerator.Create() возвращает непрозрачный тип, основанный на генераторе случайных чисел (! Windows) или генератора случайных чисел OpenSSL (BC).

RandomNumberGenerator.Create() - единственный способ получить экземпляр RNG на .NET Core, а так как он работает как на .NET Core, так и на .NET Framework, является самым портативным.

Конечно, если вы создаете IV, вы также можете просто вызвать метод экземпляра SymmetricAlgorithm.GenerateIV(), чтобы он использовал CSPRNG внутренне; хотя, как говорится в документации, вызов не нужен, так как случайный IV создается с помощью экземпляра (GenerateIV может быть использован для принудительного его создания для нового вызова до следующего вызова CreateEncryptor).