2009-10-11 13 views
6

संभव डुप्लिकेट:
Secure random number generation in PHPआप PHP के साथ क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक संख्या कैसे उत्पन्न करते हैं?

हम एक क्रिप्टोग्राफी द्वारा यादृच्छिक स्ट्रिंग एक प्रमाणीकरण टोकन, डेटाबेस में सत्र डेटा से संबद्ध रहेगा जो के रूप में उपयोग करने के लिए उत्पन्न करने के लिए की जरूरत है। हम PHP का उपयोग कर रहे हैं, जो कि एक उपयुक्त यादृच्छिक संख्या जेनरेटर अंतर्निहित प्रतीत नहीं होता है। हम php का उपयोग करके एन लंबाई की क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक स्ट्रिंग कैसे उत्पन्न कर सकते हैं?

यह भी ध्यान दें, हमारे आवेदन की प्रकृति के कारण, shell_exec तालिका से बाहर है।

+0

यहां अपना उत्तर खोजें: http://stackoverflow.com/questions/1182584/secure-random-number-generation-in-php –

उत्तर

-6

uniqid के बारे में क्या? दस्तावेज़ों का एक उदाहरण है कि इसका उपयोग कुकीज़/सत्रों के लिए कैसे किया जा सकता है।

+0

यह सबसे अच्छा तरीका हो रहा है - जब में वर्णित के रूप mt_rand के साथ संयुक्त मैनुअल। – Travis

+7

uniqid क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं है, यह विशेष रूप से दो बार समान संख्या को वापस करने के लिए डिज़ाइन नहीं किया गया है, क्योंकि यह सिस्टम घड़ी पर आधारित है, हालांकि यह केवल एक कम एन्कॉपी है यदि केवल एक हमलावर उत्पन्न होता है जब यह उत्पन्न होता है। – aaaaaaaaaaaa

+0

@ व्यवसाय: ओपी को वास्तव में क्रिप्टोग्राफ़िक रूप से सुरक्षित फ़ंक्शन की आवश्यकता नहीं है। और 'uniqid' अपने मामले के लिए एकदम सही है। – SilentGhost

-4

मेरे सिर के ऊपर से: माइक्रो टाइम लें, इसे माइक्रोटाइम% 100 से गुणा करें और प्राप्त परिणाम के sha1 पर कुछ रैंडम करें।

+5

यह बहुत सुरक्षित नहीं होगा। सिस्टम घड़ी का उपयोग न करें जब तक आप आउटपुट अनुमानित नहीं करना चाहते। –

+0

दान सही है। जहां सुरक्षा महत्वपूर्ण है, वर्तमान समय के आधार पर बीज पर्याप्त एन्ट्रॉपी प्रदान नहीं करते हैं। – christophe

4

अपने प्लेटफ़ॉर्म के आधार पर, आप/dev/urandom या कैपिकॉम का उपयोग कर सकते हैं। यह अच्छी तरह से this comment from Mark Seecof में संक्षेप है:

"यदि आप सुरक्षा या क्रिप्टोग्राफिक प्रयोजनों (अंडा, ब्लॉक सिफर के लिए यादृच्छिक चतुर्थ, पासवर्ड हैश के लिए यादृच्छिक नमक) mt_rand() के लिए कुछ कूट-यादृच्छिक बिट्स की जरूरत है है एक गरीब स्रोत सबसे पर। यूनिक्स/लिनक्स और/या MS-विंडोज प्लेटफॉर्म आप इस तरह ओएस या प्रणाली पुस्तकालय से कूट-यादृच्छिक बिट्स का एक बेहतर ग्रेड प्राप्त कर सकते हैं,:

<?php 
// get 128 pseudorandom bits in a string of 16 bytes 

$pr_bits = ''; 

// Unix/Linux platform? 
$fp = @fopen('/dev/urandom','rb'); 
if ($fp !== FALSE) { 
    $pr_bits .= @fread($fp,16); 
    @fclose($fp); 
} 

// MS-Windows platform? 
if (@class_exists('COM')) { 
    // http://msdn.microsoft.com/en-us/library/aa388176(VS.85).aspx 
    try { 
     $CAPI_Util = new COM('CAPICOM.Utilities.1'); 
     $pr_bits .= $CAPI_Util->GetRandom(16,0); 

     // if we ask for binary data PHP munges it, so we 
     // request base64 return value. We squeeze out the 
     // redundancy and useless ==CRLF by hashing... 
     if ($pr_bits) { $pr_bits = md5($pr_bits,TRUE); } 
    } catch (Exception $ex) { 
     // echo 'Exception: ' . $ex->getMessage(); 
    } 
} 

if (strlen($pr_bits) < 16) { 
    // do something to warn system owner that 
    // pseudorandom generator is missing 
} 
?> 

एनबी: यह दोनों को पढ़ने के लिए प्रयास छोड़ने के लिए आम तौर पर सुरक्षित है/dev/urandom और आपके कोड में कैपिकॉम तक पहुंचने का प्रयास, हालांकि प्रत्येक दूसरे के प्लेटफ़ॉर्म पर चुपचाप विफल हो जाएगा। उन्हें वहां छोड़ दो ताकि आपका कोड अधिक पोर्टेबल हो। "

+0

धन्यवाद - मुझे विश्वास है कि यह सबसे अच्छा तरीका है, क्योंकि/dev/urandom सिस्टम घड़ी की बजाय विभिन्न प्रकार के एन्ट्रॉपी स्रोतों का उपयोग करता है। हालांकि, मेरे मामले में, हम इस तरीके से फॉपेन का उपयोग करने में सक्षम नहीं होंगे क्योंकि हम मूल रूप से एक सैंडबॉक्स वाले वातावरण में काम कर रहे हैं। – Travis

+1

अपडेट: [विंडोज प्लेटफ़ॉर्म एसडीके पुनर्वितरण योग्य: कैपिकॉम] (http://www.microsoft.com/en-us/download/details.aspx?id=25281) - "कैपिकॉम को विंडोज एसडीके से शुरू किया गया है विंडोज 7 के लिए विंडोज एसडीके, और हालांकि वितरक विंडोज 7 और विंडोज सर्वर 2008 आर 2 ऑपरेटिंग सिस्टम के 32-बिट संस्करणों पर चलेंगे, इसके उपयोग की अनुशंसा नहीं की जाती है। अधिक जानकारी के लिए, [कैपिकॉम का उपयोग करने के विकल्प] देखें (http: // msdn.microsoft.com/en-us/library/windows/desktop/cc778518%28v=vs.85%29.aspx) " – Herbert

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

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