Avantages et inconvénients de RNGCryptoServiceProvider

Quels sont les avantages et les inconvénients de l’utilisation de System.Security.Cryptography.RNGCryptoServiceProvider vs System.Random . Je sais que RNGCryptoServiceProvider est «plus aléatoire», c’est-à-dire moins prévisible pour les pirates. D’autres avantages ou inconvénients?


METTRE À JOUR:

Selon les réponses, voici les avantages et les inconvénients de l’utilisation de RNGCryptoServiceProvider jusqu’à présent:

Avantages

  • RNGCryptoServiceProvider est un nombre plus élevé, aléatoire et cryptographique, ce qui signifie qu’il serait préférable de déterminer les clés de chiffrement et autres.

Les inconvénients

  • Random est plus rapide car c’est un calcul plus simple; Lorsqu’il est utilisé dans des simulations ou de longs calculs où le hasard cryptographique n’est pas important, cela devrait être utilisé.

Un RNG cryptographiquement fort sera plus lent — il faut plus de calcul — et sera spectralement blanc, mais ne conviendra pas aussi bien aux simulations ou aux méthodes de Monte Carlo, à la fois parce qu’ils prennent plus de temps et qu’ils peuvent ne pas être répétable, ce qui est agréable pour les tests.

En général, vous voulez utiliser un PRNG cryptographique lorsque vous voulez un numéro unique comme un UUID ou une clé pour le chiffrement, et un PRNG déterministe pour la vitesse et la simulation.

System.Random n’est pas thread-safe.

Oui, il n’y en a plus qu’un. Comme Charlie Martin a écrit System.Random est plus rapide.

Je voudrais append les informations suivantes:

Le RNGCryptoServiceProvider est l’implémentation par défaut d’un générateur de nombres aléatoires conforme aux normes de sécurité. Si vous avez besoin d’une variable aléatoire à des fins de sécurité, vous devez utiliser cette classe ou un équivalent, mais n’utilisez pas System.Random car il est hautement prévisible.

Pour toutes les autres utilisations, les performances supérieures de System.Random et les classes équivalentes sont les bienvenues.