Генерировать случайные байты Какао? - PullRequest
6 голосов
/ 24 сентября 2011

Мне нужно сгенерировать случайные данные, чтобы добавить их в мой файл для шифрования.Как бы я поступил так?Будет ли это такая же идея, как генерация строки случайных символов?

Что-то вроде:

NSData *randomData = @"what should i put here?";

А затем использовать функцию rand () для рандомизации данных?

Ваша помощь очень ценится

Ответы [ 2 ]

14 голосов
/ 24 сентября 2011

int SecRandomCopyBytes ( SecRandomRef rnd, size_t count, uint8_t *bytes );

Например:

uint8_t data[100];
int err = 0;

// Don't ask for too many bytes in one go, that can lock up your system
err = SecRandomCopyBytes(kSecRandomDefault, 100, data);
if(err != noErr)
    @throw [NSException exceptionWithName:@"..." reason:@"..." userInfo:nil];

NSData* randomData = [[NSData alloc] initWithBytes:data length:100];

Как отметил Петр в комментариях, вы также можете сделать это:

NSMutableData* data = [NSMutableData dataWithLength:100];
err = SecRandomCopyBytes(kSecRandomDefault, 100, [data mutableBytes]);

И как отметил Роб в комментариях, вам нужно связать Security.framework для SecRandomCopyBytes, чтобы быть доступным. Вы также должны включить SecRandom.h.

1 голос
/ 26 января 2014

В UNIX вы можете использовать / dev / random или / dev / urandom для получения случайности криптографического качества.

NSData *bytes = [[NSFileHandle fileHandleForReadingAtPath: @"/dev/random"] readDataOfLength: 100];

Как кажется, он считывает 100 байтов из / dev / random.Подробнее см. man urandom.

...