2010-05-11 18 views
7

मेरा अगला कार्य पासवर्ड एन्क्रिप्ट करना होगा। मैं डेटाबेस का उपयोग परत पर काम कर रहा हूँ और मेरे सह कार्यकर्ता ने यह अनुरोध किया गया है: एक खाली विधि पर मौजूद SHA-512 हैश लागू। मैं यह कैसे कर सकता हूँ?पासवर्ड कैसे हैश करें?

+16

मत करो। सुरक्षा विशेषज्ञों को पासवर्ड एन्क्रिप्शन छोड़ दें। आप इसे गलत समझेंगे, और फिर आप अपने संगठन को अपमानित करेंगे। एक विशेषज्ञ किराया; जो कमजोरियों के खिलाफ सफल हमले के बाद गड़बड़ी की सफाई की लागत से कहीं अधिक सस्ता है, जिसे आप नहीं जानते थे कि आप अपनी सुरक्षा प्रणाली में शामिल हो रहे थे। –

+4

एक विशेषज्ञ को भर्ती करना आपके जोखिम के स्तर पर निर्भर करता है। यदि आप जनता के लिए निजी जानकारी संग्रहीत कर रहे हैं और यह पासवर्ड रास्ते में खड़ा है, तो एक विशेषज्ञ की तलाश करें। नीचे सूचीबद्ध अधिकांश उदाहरण आपकी औसत गैर गोपनीय सूचना परियोजना के लिए पर्याप्त होंगे। –

+1

@Eric - मुझे लगता है कि आप इसका मतलब है "अपने स्वयं के निर्माण के बजाय .NET में SHA512 के कार्यान्वयन का उपयोग करें", न कि "अपनी सुरक्षा के लिए .NET में लागू सदस्यता प्रदाताओं का उपयोग करें।" मैं दोनों के लिए कुछ वैधता देख सकता हूं, लेकिन जब मैं पूर्व के साथ 100% सहमत हूं, तो मैं कुछ स्थितियों को देख सकता हूं जहां उत्तरार्द्ध वास्तव में संभव नहीं है। असल में, यह मेरे साथ कभी भी नहीं हुआ कि कोई व्यक्ति SHA-512 के अपने संस्करण को लागू करने पर विचार करेगा - इस प्रकार आपकी टिप्पणी ने मुझे एक मिनट के लिए परेशान किया था कि क्या आपका मतलब है कि मुझे अपने ऐप्स में किसी और योग्यता के लिए सुरक्षा का अनुबंध करना चाहिए। :-) – tvanfosson

उत्तर

10

काफी सरल वास्तव में प्रक्रिया:

byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample); 

using(SHA512 sha512 = new SHA512Managed()) 
{ 
    byte[] hash = sha512.ComputeHash(data); // Add Per User Salt as per the Below 
} 

hash अब प्रारंभिक डेटा है कि आप टुकड़ों में बांटा चाहते थे की एक गैर प्रतिवर्ती हैश शामिल हैं। इसके अलावा, MSDN देखें। कुछ नोट: (। अब बेहतर है, और उपयोगकर्ता के लिए एक अनन्य - धन्यवाद पॉल, अच्छा बिंदु)

  • हमेशा एक salt का उपयोग
  • SHA2 * पीढ़ी (और सामान्य में SHA) हैश तरीकों गति के लिए निर्माण कर रहे हैं , इसलिए वे असुरक्षित नहीं हैं, लेकिन वे सबसे सुरक्षित नहीं हैं। bcrypt को देखो और साथ ही SLaksmentioned है।
+0

डाउनवोट पर कोई शब्द? धन्यवाद। –

+2

मेरे द्वारा +1, हालांकि यह उल्लेखनीय होगा कि नमक प्रति-पासवर्ड अद्वितीय होना चाहिए। और शायद नमक – PaulG

+0

@ पॉल - गुड प्वाइंट को जोड़ने के लिए अपना उदाहरण बदलना, –

1

SHA512 Class

उस पृष्ठ से सी # उदाहरण:

byte[] data = new byte[DATA_SIZE]; 
byte[] result; 
SHA512 shaM = new SHA512Managed(); 
result = shaM.ComputeHash(data); 
+0

-1, जो तेज़ है। एक धीमी कुंजी व्युत्पन्न फ़ंक्शन का उपयोग करें, जैसे कि पीबीकेडीएफ 2, बीक्रिप्ट या स्क्रिप। – CodesInChaos

10

आप bcrypt का उपयोग करना चाहिए, जो SHA512 से पासवर्ड के लिए अधिक सुरक्षित है।

तुम सच में SHA512 उपयोग करने की आवश्यकता है, तो आप, SHA512Managed class का उपयोग करना चाहिए के रूप में अन्य उत्तर उल्लेख किया है।
अपने हैश को नमक बनाना सुनिश्चित करें।

+2

दिलचस्प, यह नहीं देखा कि – Pharabus

+0

से पहले क्या आप हैशिंग से पहले सादे पाठ को नमक नहीं करते? –

+0

@ चाचा ब्रैड: यही मेरा मतलब था। – SLaks

7

पासवर्ड कैसे है?

एक नमक के साथ

। वास्तव में।

कभी नहीं, कभी ऐसा करते हैं:

byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample); 

लेकिन इस:

byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample + salt); 

यह सबसे गलत समझा "व्यापार के चाल" से एक है। ज्यादातर लोग नहीं जानते कि "नमक" क्या है और जब आप उन्हें समझाते हैं, तो वे सोचते हैं कि यह व्यर्थ है।

सत्य है: SHA-512 या MD5 या कुछ बहुत कमजोर हैश, एक बार इंद्रधनुष तालिकाओं precomputed कर रहे हैं, कोई फर्क नहीं पड़ता। एसएचए -65536, क्या यह अस्तित्व में होना चाहिए (मैं यहां मुखौटा हूं), इंद्रधनुष सारणी प्रीकंप्यूटेड होने के बाद किसी भी अन्य हैशिंग एल्गोरिदम से बेहतर नहीं होगा।

एक बड़ा पर्याप्त "नमक" इंद्रधनुष तालिकाओं असंभव बना देता है:

http://en.wikipedia.org/wiki/Rainbow_table

ध्यान दें कि भले ही आप पूरी तरह से समझ कैसे हैश, नमक और इंद्रधनुष टेबल संबंधित (और इसलिए क्यों विकिपीडिया लेख कहता है: "एक नमक अक्सर टुकड़ों में बंटी पासवर्ड के साथ कार्यरत है इस हमले, और अधिक कठिन अक्सर अव्यवहार्य बनाने के लिए।") वहाँ एक बहुत ही उच्च संभावना है कि अपने सहकर्मियों नहीं करते हैं। जैसे ही यह बहुत संभावना है कि अधिकांश लोग इस धागे में ऊपर और नीचे गिरते हैं, इस विषय को समझ में नहीं आता है।

मैंने यहां 30 अपवॉट्स के साथ SO पर जवाब देखा है, जहां कोई समझ नहीं पाया कि नमक को अपनी स्थिति की रक्षा के लिए टेक्नो-बज़वर्ड के साथ क्या रखा गया था ... और फिर भी उनके पास इन सभी उपवास (बहुत आलसी सवाल खोजने के लिए लेकिन यह महाकाव्य था)।

+1

में जोड़ा गया है और आपको प्रत्येक नए हैश के लिए अपना नमक बनाने के लिए 'आरएनजीक्रिप्टो सेवा प्रदाता' का उपयोग करना चाहिए, और हैश और नमक दोनों को स्टोर करना चाहिए। – Will

+0

अकेले नमक पर्याप्त नहीं है। हैश फ़ंक्शन भी धीमा होना चाहिए। पीबीकेडीएफ 2, बीक्रिप्ट या स्क्रिप का प्रयोग करें। – CodesInChaos

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