2012-10-03 4 views
8

durch einige cryptogtaphy Sachen gehen, sah ich, dass RNGCryptoServiceProvider 2 Methoden hat:RNGCryptoServiceProvider und Nullen?

link

RNGCryptoServiceProvider.GetNonZeroBytes 

und

RNGCryptoServiceProvider.GetBytes 

Und so frage ich:

Was seltsam ist mit Füllen eines Arrays von Bytes mit einem kryptografischen starke Sequenz von Zufallswert, die einige (0 oder mehr) von ihnen sind Nullen? (es zufällige Werte und anscheinend gibt gewohnt viele Nullen sein, und immer noch Null ist auch eine regelmäßige Zahl)

warum haben sie das Unterscheidungs ​​geschaffen?

Antwort

8

Innerhalb des .NET-Frameworks wird GetNonZeroBytes(byte[]) beim Generieren von PKCS # 1-Auffüllung für RSA-Verschlüsselung verwendet, die 0x00 als Trennzeichen verwendet.

ein Tool wie Reflektor, können Sie es in RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(byte[]) verwendet zu implementieren Polsterung gemäß RFC 2313, Abschnitt 8.1.2 (RFC 3218 hat einige schöne ASCII-Kunst, die die Byte-Layout deutlicher zeigt) sehen.

GetNonZeroBytes(byte[]) könnte auch verwendet werden, um Salz zu erzeugen. Die Cryptography StackExchange-Site hat a similar question, was darauf hindeutet, dass das Vermeiden von 0x00 Bibliotheken und APIs helfen soll, die das Salz als eine mit Null abgeschlossene Zeichenfolge behandeln könnten, die das Salz versehentlich abschneiden würde. Wenn Sie jedoch P/Invoke nicht verwenden, ist dies in .NET wahrscheinlich kein Problem.

+0

Salz ist nur zusätzliche Schwierigkeit, um Regenbogen-Tabelle. es kann mit GetBytes auch gemacht werden .... richtig? –

+0

Korrekt, solange du sicher bist, dass keiner der Orte, die das Salz verwenden oder speichern, ein Problem mit "0x00" hat. Wenn Sie sich nicht sicher sind, könnten Sie es immer zuerst mit etwas Salz testen, das speziell '0x00' Byte enthält. –

+0

Danke Ashley :-) –