35 votes

RNGCryptoServiceProvider dans .Net Core

Je ne peux pas trouver la classe System.Security.Cryptography.RNGCryptoServiceProvider dans .NetCore.

Elle est essentielle pour l'application que j'essaie de porter depuis .Net Framework, car elle est utilisée pour générer un vecteur d'initialisation pour le chiffrement.

Existe-t-elle sous un nom différent, ou existe-t-il un autre moyen d'atteindre cette fonctionnalité?

54voto

bartonjs Points 12011

System.Security.Cryptography.RandomNumberGenerator est la classe de base pour les implémentations de générateur de nombres pseudo-aléatoires cryptographiquement sécurisés (CSPRNG). Dans le Framework .NET, RandomNumberGenerator.Create() renvoie une instance de RNGCryptoServiceProvider (sauf si configuré différemment par CryptoConfig). Dans .NET Core, RandomNumberGenerator.Create() renvoie un type opaque basé sur BCryptGenRandom (Windows) ou le générateur de nombres aléatoires d'OpenSSL (!Windows).

RandomNumberGenerator.Create() est le seul moyen d'obtenir une instance de RNG sur .NET Core, et puisqu'il fonctionne à la fois sur .NET Core et .NET Framework, il est le plus portable.

Bien sûr, si vous générez un vecteur d'initialisation, vous pouvez également appeler la méthode d'instance SymmetricAlgorithm.GenerateIV() pour qu'elle utilise le CSPRNG en interne; bien que, comme le dit la documentation, l'appeler est inutile car un IV aléatoire est créé avec l'instance (GenerateIV peut être utilisé pour le forcer à en générer un nouveau avant l'appel suivant à CreateEncryptor).

8voto

Ivan Zaruba Points 1117

Une des solutions suggérées consiste à utiliser RandomNumberGenerator.Create() https://github.com/dotnet/corefx/issues/2881

1 votes

Il s'agit probablement de la bonne réponse, mais vous devez spécifier pourquoi c'est le cas. Par exemple, est-ce que RandomNumberGenerator renvoie des nombres aléatoires cryptographiquement sécurisés? Et si c'est le cas, pourquoi et comment? Notez que les réponses basées uniquement sur des liens sont généralement mal vues.

3voto

Pooja Mahtha Points 1

Nous pouvons le faire ainsi en .Net core. Cela a fonctionné pour moi.

RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
var byteArray = new byte[4];
provider.GetBytes(byteArray);

//convert 4 bytes to an integer
var randomInteger = BitConverter.ToUInt32(byteArray, 0);

Il est présent sous l'espace de noms : System.Security.Cryptography

Ajoutez ceci dans votre classe pour utiliser la méthode : using System.Security.Cryptography;

J'espère que cela vous aidera. Merci

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X