Генерация случайных чисел
Криптографически сильные псевдослучайные числа требуются для многих алгоритмов шифрования. Поскольку эти псевдослучайные числа сгенерированы компьютерным алгоритмом, они не действительно случайны. Однако алгоритм не является заметным от последовательности.
Путем Вы генерируете случайные числа, зависит от того, пишете ли Вы код для OS X или iOS.
Генерация случайных чисел в OS X
В OS X можно получить криптографически безопасные псевдослучайные числа путем чтения байтов из /dev/random
файл устройств. Каждый байт от этого файла является криптографически случайным значением от 0-255. Путем конкатенации этих байтов можно генерировать случайное число произвольного размера.
Например, при необходимости в случайном 64-разрядном целочисленном значении Вы могли бы записать код как это:
FILE *fp = fopen("/dev/random", "r"); |
if (!fp) { |
perror("randgetter"); |
exit(-1); |
} |
uint64_t value = 0; |
int i; |
for (i=0; i<sizeof(value); i++) { |
value <<= 8; |
value |= fgetc(fp); |
} |
fclose(fp); |
Задачу преобразования такого значения к равномерно распределенному значению в данном диапазоне оставляют как осуществление для читателя.
Генерация Случайных чисел в iOS
В iOS можно использовать Randomization Services для генерации этих чисел. Randomization Services, в свою очередь, вызывает генератор случайных чисел в уровне Core OS. Для получения дополнительной информации читайте Ссылку Randomization Services.