2012-10-03 4 views
8

chodząc pewnym cryptogtaphy rzeczy, widziałem, że RNGCryptoServiceProvider ma 2 sposoby:RNGCryptoServiceProvider i Zeros?

link

RNGCryptoServiceProvider.GetNonZeroBytes 

i

RNGCryptoServiceProvider.GetBytes 

A więc pytam:

Co jest dziwne z wypełnianiem tablicy bajtów kryptograficznie silna sekwencja losowej wartości, którą niektóre (0 lub więcej)z nich to zera? (to jest wartości losowe i widocznie tam przyzwyczajenie być wiele zer, a jeszcze zerowa jest również liczba regularnych)

dlaczego stworzyli wyróżniających?

Odpowiedz

8

W środowisku .NET framework, GetNonZeroBytes(byte[]) jest używany podczas generowania dopełnienia PKCS # 1 dla szyfrowania RSA, który używa 0x00 jako separatora.

Używanie narzędzia takie jak reflektor, można zobaczyć, że stosowane w RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(byte[]) wdrożyć jako dopełnienie za RFC 2313, sekcja 8.1.2 (RFC 3218 posiada kilka ASCII Art, który pokazuje układ bajtowy jaśniej).

GetNonZeroBytes(byte[]) może być również używany do generowania soli. Witryna kryptograficzna StackExchange ma numer a similar question, co sugeruje, że unikanie 0x00 ma na celu pomóc bibliotekom i API, które mogą traktować sól jako łańcuch zakończony zerem, co przypadkowo spowoduje obcięcie soli. Jednakże, chyba że używa się tego, jest mało prawdopodobne, aby dotyczyło to .NET.

+0

sól dodaje tylko trudność do stołu tęczowego. można to zrobić również za pomocą GetBytes ... prawda? –

+0

Prawidłowo, o ile jesteś pewny, że żadne z miejsc, które używają lub nie przechowują soli, ma problem z '0x00'. Jeśli nie jesteś pewien, zawsze możesz przetestować go najpierw z solą, która zawiera konkretnie '0x00' bajtów. –

+0

Dzięki Ashley :-) –