2009-11-03 11 views

Respuesta

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

    string token = Convert.ToBase64String(tokenData); 
} 
+28

El criptoanálisis del generador de GUID de WinAPI muestra que, dado que la secuencia de GUID de V4 es pseudoaleatoria, dado el estado inicial, se pueden predecir hasta los próximos 250 000 GUID devueltos por la función UuidCreate. Esta es la razón por la que los GUID no deben usarse en criptografía, por ejemplo, como claves aleatorias. (de http://en.wikipedia.org/wiki/Globally_Unique_Identifier) ​​ – configurator

+1

Esto no es específicamente criptografía, aunque. Y, sería difícil predecir el estado inicial de la máquina. –

+10

Un ataque común es DDoS un servidor hasta que se reinicie. Entonces, predecir el estado inicial (reloj del sistema) es mucho más fácil. – LaJmOn

3

Eso depende de lo que entendemos por la vía rápida ...

No hay realmente rápido y seguro generador aleatorio. Si quieres rápido, debes usar la clase aleatoria regular. Si quiere seguridad, debe usar el generador aleatorio en el espacio de nombres Criptografía, pero eso es significativamente más lento. Simplemente no puedes tener ambas cosas.

+1

Si está dispuesto a realizar interoperabilidad con una implementación criptográfica nativa, puede tener un excelente rendimiento (varias veces más rápido que 'System.Random') y seguridad. – CodesInChaos

+9

@CodesInChaos: Entonces; rápido, seguro, simple: elija dos. :) – Guffa

Cuestiones relacionadas