web-dev-qa-db-fra.com

Comment puis-je générer un numéro pseudo-aléatoire cryptographiquement sécurisé en C #?

Existe-t-il une implémentation rapide de générateur de nombres pseudo-aléatoires sécurisé cryptographiquement (CSPRNG) pour C # 3.0 (.NET Framework 3.5), pour les jetons d'authentification?

55
Alon Gubkin
using System.Security.Cryptography;
...
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider())
{
    byte[] tokenData = new byte[32];
    rng.GetBytes(tokenData);

    string token = Convert.ToBase64String(tokenData);
}
103
John Gietzen
3
stuartd

Cela dépend de ce que vous entendez par rapide ...

Il n'y a pas de générateur aléatoire sécurisé vraiment rapide. Si vous voulez rapide, vous devez utiliser la classe Random régulière. Si vous voulez sécuriser, vous devez utiliser le générateur aléatoire dans l'espace de noms Cryptography, mais c'est beaucoup plus lent. Vous ne pouvez tout simplement pas avoir les deux.

3
Guffa