Użyłem następującego kodu do wygenerowania sekwencji liczb pseudolosowych, które były używane do celów kryptograficznych, ale potem czytałem gdzieś, że może nie być bardzo bezpieczne. Czy ktoś może mi dać implementację lepszego generatora C - głównym celem jest, aby ta metoda była szybka. Na przykład zrobiłem kilka badań i natknąłem się na metodę Blum Blum Shub, która całkowicie zniszczyłaby wydajność, wykonując obliczenia pow (N).Szybki generator liczb pseudolosowych do kryptografii w C
PS. Proszę nie cytować artykułów Wikipedii bez kodu C/C++. Szukam próbki kodu C lub C++ tego, co pokazuję poniżej.
#define ROL(v, shift) ((((v) >> ((sizeof(v) * 8) - (shift))) | ((v) << (shift))))
ULONGLONG uiPSN = doSeed(); //64-bit unsigned integer
for(int i = 0; i < sizeOfArray; i++)
{
uiPSN = uiPSN * 214013L + 2531011L;
uiPSN = ROL(uiPSN, 16);
//Apply 'uiPSN'
}
Zdecydowanie radzę użyć PRNG obsługującego Hash-DRBG lub HMAC-DRBG, szczególnie jeśli masz jakiekolwiek zamiary na certyfikację FIPS. Algorytmy i ich wymagania są dostępne na stronie [NIST] (http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf) i są * nie * trywialne (dobre bezpieczeństwo rzadko jest). – WhozCraig
[Mersenne Twister] (http://en.wikipedia.org/wiki/Mersenne_twister) to dobra równowaga między szybkością a "przypadkowością". Wiele implementacji Open Source istnieje dla wielu języków. Możesz pobrać implementację 'C++' [tutaj] (http: //www.bedaux.net/mtrand /) –
@awashburn Lub użyj '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –
Rapptz