У OpenSSL есть приличный.
#include <openssl/rand.h>
...
time_t now = time(NULL);
RAND_seed(&now, sizeof(now)); // before first number you need
int success = RAND_bytes(...);
if (!success) die_loudly();
RAND_cleanup(); // after you don't need any more numbers
Microsoft CryptoAPI имеет один на Win32. Требуется еще несколько вызовов функций. Не включая детали здесь, потому что для каждого из этих вызовов есть от 2 до 5 аргументов. Будьте осторожны, CryptoAPI, похоже, требует от пользователя правильной настройки полного локального профиля (C: \ Documents and Settings \ user \ Local Settings), прежде чем он сможет дать вам случайное число.
CryptAcquireContext // see docs
CryptGenRandom
CryptReleaseContext