Вы можете просто создать любое случайное число шириной не менее 32 бит и отформатировать его как шестнадцатеричное. Примеры:
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
uint32_t n;
n = mrand48(); // #1
n = rand(); // #2
FILE * f = fopen("/dev/urandom", "rb");
fread(&n, sizeof(uint32_t), 1, f); // #3
// ... etc. etc. E.g. Windows Crypto API
char hex[9];
sprintf(hex, "%08X", n);
Теперь hex
- строка, содержащая восемь случайных шестнадцатеричных цифр. Не забудьте запустить различные генераторы псевдослучайных чисел (используя srand48()
и srand()
, соответственно, для № 1 и № 2). Поскольку вам, по сути, придется заполнять PRNG из случайного источника хотя бы одним 32-разрядным целым числом, вы также можете напрямую коснуться случайного источника (если вы не используете time()
или что-то «неслучайное», подобное этому) .