2011-09-24 14 views
6

Devo generare alcuni dati casuali da aggiungere al mio file per la crittografia. Come potrei fare questo? Sarebbe la stessa idea di generare una stringa di caratteri casuali?Genera byte casuali Cocoa?

Qualcosa di simile:

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

e quindi utilizzare la funzione rand() per randomizzare i dati?

Il vostro aiuto è molto apprezzato

+0

Come saprai quali byte sono le aggiunte casuali e quali fanno parte del testo in chiaro originale quando decifri? Esistono già diversi schemi di pad crittografici diversi da utilizzare in diverse circostanze, la maggior parte dei quali è più facile da tagliare in seguito rispetto a un mucchio di byte casuali. – rossum

risposta

14

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

Ad esempio:

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]; 

Come notato da Peter nei commenti, si può anche fare questo:

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

E come notato da Rob nei commenti, è necessario collegare Security.framework per Sec RandomCopyBytes disponibili. È inoltre necessario includere SecRandom.h.

+0

Funzionerebbe per il cacao? –

+0

Sì; è possibile utilizzare [NSData initWithBytes: length:] per accedere ai dati in un oggetto NSData. – James

+0

Questo non ha funzionato per me ... –

1

Su UNIX è possibile fare affidamento su/dev/random o/dev/urandom per ottenere la casualità della qualità crittografica.

Come sembra, legge 100 byte da/dev/random. Fare riferimento a man urandom per i dettagli.