2009-11-03 18 views
44

प्रमाणीकरण टोकन के लिए सी # 3.0 (.NET Framework 3.5) के लिए cryptographically secure pseudorandom number generator (सीएसपीआरएनजी) का कोई तेज़ कार्यान्वयन है?मैं सी # में क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म यादृच्छिक संख्या कैसे उत्पन्न कर सकता हूं?

उत्तर

85
using System.Security.Cryptography; 
... 
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider()) 
{ 
    byte[] tokenData = new byte[32]; 
    rng.GetBytes(tokenData); 

    string token = Convert.ToBase64String(tokenData); 
} 
+28

WinAPI GUID जनरेटर के क्रिप्टैनालिसिस से पता चलता है कि, चूंकि वी 4 GUID का अनुक्रम छद्म-यादृच्छिक है, इसलिए प्रारंभिक राज्य किसी भी कार्य UUidCreate द्वारा लौटाए गए अगले 250 000 GUID तक भविष्यवाणी कर सकता है। यही कारण है कि GUID को क्रिप्टोग्राफ़ी में उपयोग नहीं किया जाना चाहिए, उदाहरण के लिए, यादृच्छिक कुंजी के रूप में। (http://en.wikipedia.org/wiki/Globally_Unique_Identifier से) – configurator

+1

यह विशेष रूप से क्रिप्टोग्राफी नहीं है, था। और, मशीन की प्रारंभिक स्थिति की भविष्यवाणी करना मुश्किल होगा। –

+10

डीडीओएस को एक सामान्य हमला तब तक एक आम हमला है जब तक कि इसे पुनरारंभ नहीं किया जाता है। फिर प्रारंभिक स्थिति (सिस्टम घड़ी) की भविष्यवाणी करना बहुत आसान है। – LaJmOn

3

है कि आप तेजी से से क्या मतलब है पर निर्भर करता है ...

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

+1

यदि आप मूल क्रिप्टो कार्यान्वयन के साथ इंटरऑप करने के इच्छुक हैं तो आप उत्कृष्ट प्रदर्शन ('System.Random' से कई गुना तेज) और सुरक्षा दोनों प्राप्त कर सकते हैं। – CodesInChaos

+9

@CodesInChaos: तो; तेज़, सुरक्षित, सरल - किसी भी दो को चुनें। :) – Guffa

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

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