2013-06-08 3 views
20

की SHA-256 स्ट्रिंग प्राप्त करें मेरे पास कुछ स्ट्रिंग है और मैं इसे सी # के उपयोग से SHA-256 हैश फ़ंक्शन के साथ रखना चाहता हूं। मुझे ऐसा कुछ चाहिए:एक स्ट्रिंग

string hashString = sha256_hash("samplestring"); 

क्या ऐसा करने के लिए ढांचे में कुछ बनाया गया है?

+1

http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256.aspx। -1। –

+2

हैश बाइट्स पर काम करते हैं, स्ट्रिंग नहीं। तो आपको सबसे पहले एक एन्कोडिंग चुनने की आवश्यकता है जो स्ट्रिंग को बाइट्स में बदल देता है। मैं इसके लिए यूटीएफ -8 की सलाह देता हूं। – CodesInChaos

+0

कुछ मुझे बताता है कि इस पोस्ट को पढ़ने वाले लोगों को यह भी जांचना चाहिए: https://stackoverflow.com/questions/4948322/fundamental-difference-between-hashing-and-encryption-algorithms – Ziezi

उत्तर

65

कार्यान्वयन कि

public static String sha256_hash(String value) { 
    StringBuilder Sb = new StringBuilder(); 

    using (SHA256 hash = SHA256Managed.Create()) { 
    Encoding enc = Encoding.UTF8; 
    Byte[] result = hash.ComputeHash(enc.GetBytes(value)); 

    foreach (Byte b in result) 
     Sb.Append(b.ToString("x2")); 
    } 

    return Sb.ToString(); 
} 

संपादित की तरह हो सकता है:Linq कार्यान्वयन अधिक है संक्षिप्त, लेकिन, शायद, कम पठनीय:

public static String sha256_hash(String value) { 
    using (SHA256 hash = SHA256Managed.Create()) { 
    return String.Concat(hash 
     .ComputeHash(Encoding.UTF8.GetBytes(value)) 
     .Select(item => item.ToString("x2"))); 
    } 
} 

संपादित करें 2 : .NET कोर

public static String sha256_hash(string value) 
{ 
    StringBuilder Sb = new StringBuilder(); 

    using (var hash = SHA256.Create())    
    { 
     Encoding enc = Encoding.UTF8; 
     Byte[] result = hash.ComputeHash(enc.GetBytes(value)); 

     foreach (Byte b in result) 
      Sb.Append(b.ToString("x2")); 
    } 

    return Sb.ToString(); 
} 
+0

आप हैश को पासवर्ड में वापस कैसे डिक्रिप्ट करेंगे? –

+6

@ Daniel metlitski: आप * नहीं कर सकते * हैश है * एक तरीका फ़ंक्शन *, आप हैश की गणना कर सकते हैं लेकिन तर्क वापस प्राप्त नहीं कर सकते हैं। एक नया उपयोगकर्ता पंजीकृत करते समय, पासवर्ड नहीं स्टोर करें, लेकिन इसके हैश; प्रमाणीकरण पर, प्रदान किए गए पासवर्ड पर हैश की गणना करें और हैश की तुलना संग्रहीत हैश के साथ करें। –

+0

सब ठीक है, लेकिन आपका नामकरण सम्मेलन भयानक है - स्थानीय चर अपरकेस, विधि नाम लोअरकेस - यहां शाम के लिए एक अच्छा व्याख्यान है: https://docs.microsoft.com/en-us/dotnet/standard/design- दिशानिर्देश/सामान्य नामकरण-सम्मेलन –