2012-02-10 17 views
6

में सुरक्षित रूप से यादृच्छिक संख्या उत्पन्न करना उद्देश्य-सी के लिए मुझे उद्योग-स्वीकृत सुरक्षित छद्म-यादृच्छिक संख्या जनरेटर कहां मिल सकता है? क्या ओएस एक्स एसडीके में कोई बनाया गया है?उद्देश्य-सी

मेरा प्रश्न मूल रूप से this one जैसा ही है, सिवाय इसके कि मैं सुरक्षित PRNG की तलाश में हूं।

संपादित करें: मदद के लिए

सभी को धन्यवाद।

-(NSData *)getRandomBytes:(NSUInteger)length { 
    return [[NSFileHandle fileHandleForReadingAtPath:@"/dev/random"] readDataOfLength:length]; 
} 

उत्तर

4

Security.framework ऐसा करने के लिए एक सुविधा है, SecRandomCopyBytes() कहा जाता है: यहाँ/dev/यादृच्छिक विधि लागू करने के लिए एक सरल एक लाइनर है। हालांकि यह वास्तव में मूल रूप से /dev/random से कॉपी कर रहा है।

+0

SecRandomCopyBytes [OSX में समर्थित] है (http://stackoverflow.com/questions/6510638/encrypt-nsstring-using-aes-128-and-a -कुंजी)? – pepsi

+0

आह लग रहा है SecRandomCopyBytes किया गया था [शेर में जोड़ा] की तरह (https://developer.apple.com/library/mac/#releasenotes/General/MacOSXLionAPIDiffs/Security.html)। मैं 10.6 का समर्थन करना चाहता हूं .. कोई विकल्प? – pepsi

+0

@pepsi: केवल '/ dev/random' से पढ़ने के बारे में कैसे? –

3

आप उपयोग कर सकते हैं

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

यह function सुरक्षा/Security.h फ्रेमवर्क में उपलब्ध है। यह फ़ंक्शन क्रिप्टोग्राफ़िक-सुरक्षित यादृच्छिक बाइट्स की एक सरणी प्राप्त करने के लिए/dev/random से पढ़ता है।

/dev/random एक अवरुद्ध इंटरफ़ेस है जो केवल यादृच्छिक डेटा देता है क्योंकि सिस्टम किसी विशेष समय पर होता है। प्रणाली अनियमितता खत्म हो जाता है एक बार, कोई और अधिक प्राप्त किए गए जब तक अधिक उत्पन्न होता है (कीबोर्ड पर उपयोगकर्ता धमाके, या फिर भी ओएस बटोरता सच अनियमितता सुनकर) हो सकता है।/dev/urandom एक गैर-अवरुद्ध इंटरफ़ेस है जो छद्म यादृच्छिक जनरेटर का उपयोग करके, हमेशा यादृच्छिकता समाप्त होने पर भी अनुरोधित मात्रा में डेटा लौटाता है। ओएस एक्स में इनमें से दोनों भी हैं, हालांकि वे दोनों लिनक्स पर/dev/urandom जैसा कार्य करते हैं।

Random Numbers
random(4) Mac OS X Manual Page
How good is SecRandomCopyBytes?