2011-09-24 26 views
6

मुझे एन्क्रिप्शन के लिए मेरी फ़ाइल में जोड़ने के लिए कुछ यादृच्छिक डेटा उत्पन्न करने की आवश्यकता है। मैं ऐसा कैसे कर पाऊंगा? क्या यह यादृच्छिक पात्रों की एक स्ट्रिंग उत्पन्न करने जैसा ही विचार होगा?यादृच्छिक बाइट कोको उत्पन्न करें?

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

और फिर डेटा randomize करने रैंड() फ़ंक्शन का उपयोग करें:

तरह?

आपका मदद बहुत सराहना कर रहा है

+0

आप कैसे जानेंगे कि बाइट्स यादृच्छिक जोड़ क्या हैं और जब आप डिक्रिप्ट करते हैं तो मूल सादे पाठ का हिस्सा कौन सा होता है? अलग-अलग परिस्थितियों में उपयोग के लिए पहले से ही कई अलग-अलग क्रिप्टोग्राफिक पैडिंग योजनाएं हैं, जिनमें से अधिकांश यादृच्छिक बाइट्स के गुच्छा के बाद बाद में काटना आसान है। – rossum

उत्तर

14

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

और रोब द्वारा टिप्पणियों में उल्लेख किया गया है, आपको Sec के लिए Security.framework को लिंक करने की आवश्यकता है RandomCopyBytes उपलब्ध होने के लिए। आपको SecRandom.h भी शामिल करने की आवश्यकता है।

+0

यह कोको के लिए काम करेगा? –

+0

हां; एनएसडीटा ऑब्जेक्ट में डेटा प्राप्त करने के लिए आप [NSData initWithBytes: length:] का उपयोग कर सकते हैं। – James

+0

यह मेरे लिए काम नहीं किया ... –

1

यूनिक्स पर आप क्रिप्टोग्राफिक गुणवत्ता की यादृच्छिकता प्राप्त करने के लिए/dev/random// dev/urandom पर भरोसा कर सकते हैं।

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

जैसा लगता है, यह/dev/random से 100 बाइट्स पढ़ता है। विवरण के लिए man urandom का संदर्भ लें।

संबंधित मुद्दे