2012-10-03 15 views
8

caminar a través de algunas cosas cryptogtaphy, vi que RNGCryptoServiceProvider tiene 2 métodos:RNGCryptoServiceProvider y Zeros?

link

RNGCryptoServiceProvider.GetNonZeroBytes 

y

RNGCryptoServiceProvider.GetBytes 

Y así me pregunto:

¿Cuál es extraña con llenar una matriz de bytes con una criptografía secuencia fuerte de valor aleatorio que algunos (0 o más) de ellos son ceros? (es valores aleatorios y, aparentemente, no suele haber muchos ceros, y siendo cero es también un número regular)

¿Por qué se creó el distintivo?

Respuesta

8

Dentro del .NET Framework, GetNonZeroBytes(byte[]) se utiliza al generar PKCS # 1 relleno para el cifrado RSA, que usa 0x00 como separador.

Utilizando una herramienta como reflector, se puede ver que utiliza en RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(byte[]) para implementar el relleno según RFC 2313, sección 8.1.2 (RFC 3218 tiene un poco de arte ASCII agradable que demuestra la disposición de bytes con mayor claridad).

GetNonZeroBytes(byte[]) también se podría utilizar para generar sal. El sitio Cryptography StackExchange tiene a similar question, lo que sugiere que evitar 0x00 es ayudar con bibliotecas y API que pueden tratar a la sal como una cadena terminada en cero, lo que accidentalmente truncaría la sal. Sin embargo, a menos que uno esté usando P/Invoke, es poco probable que esto sea una preocupación en .NET.

+0

sal es solo agregar dificultad a la tabla de arco iris. se puede hacer con GetBytes también ... ¿no? –

+0

Correcto, siempre y cuando esté seguro de que ninguno de los lugares que usa o almacena la sal tiene un problema con '0x00'. Si no está seguro, siempre puede probarlo primero con un poco de sal que contenga específicamente bytes '0x00'. –

+0

Gracias Ashley :-) –

Cuestiones relacionadas