2011-09-24 23 views
6

Tôi cần tạo một số dữ liệu ngẫu nhiên để thêm vào tệp của mình để mã hóa. Tôi sẽ đi đâu để tới đó? Nó sẽ là loại ý tưởng tương tự như tạo ra một chuỗi ký tự ngẫu nhiên?Tạo byte ngẫu nhiên Ca cao?

Cái gì như:

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

Và sau đó sử dụng rand) chức năng (để ngẫu nhiên hoá dữ liệu?

sự giúp đỡ của bạn được đánh giá rất

+0

Làm cách nào để bạn biết byte nào là phần bổ sung ngẫu nhiên và là một phần của bản rõ gốc khi bạn giải mã? Đã có một số lược đồ đệm mật mã khác nhau để sử dụng trong các trường hợp khác nhau, hầu hết trong số đó là dễ dàng hơn để cắt bỏ sau đó hơn một loạt các byte ngẫu nhiên. – rossum

Trả lời

14

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

Ví dụ:

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

Theo ghi nhận của Peter trong các ý kiến, bạn cũng có thể làm điều này:

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

Và như ghi nhận bởi Rob trong các ý kiến, bạn cần phải liên kết Security.framework cho Sec RandomCopyBytes khả dụng. Bạn cũng cần bao gồm SecRandom.h.

+0

Điều này có hiệu quả đối với ca cao không? –

+0

Có; bạn có thể sử dụng [NSData initWithBytes: length:] để truy cập dữ liệu vào đối tượng NSData. – James

+0

Điều này không hiệu quả đối với tôi ... –

1

Trên UNIX, bạn có thể dựa vào/dev/random hoặc/dev/urandom để có được sự ngẫu nhiên về chất lượng mã hóa.

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

Dường như nó đọc 100 byte từ/dev/ngẫu nhiên. Tham khảo man urandom để biết chi tiết.