2010-03-12 23 views
58

में कनवर्ट करना मैं एक बाइट सरणी, जो एक बाइट सरणी है, को स्ट्रिंग में कैसे परिवर्तित कर सकता हूं?एक md5 हैश बाइट सरणी को एक स्ट्रिंग

byte[] bytePassword = Encoding.UTF8.GetBytes(password); 

using (MD5 md5 = MD5.Create()) 
{ 
    byte[] byteHashedPassword = md5.ComputeHash(bytePassword); 
} 

मुझे byteHashedPassword को एक स्ट्रिंग में कनवर्ट करने की आवश्यकता है।

उत्तर

66
public static string ToHex(this byte[] bytes, bool upperCase) 
    { 
     StringBuilder result = new StringBuilder(bytes.Length*2); 

     for (int i = 0; i < bytes.Length; i++) 
      result.Append(bytes[i].ToString(upperCase ? "X2" : "x2")); 

     return result.ToString(); 
    } 

फिर आप एक विस्तार पद्धति के रूप में कॉल कर सकते हैं:

string hexString = byteArray.ToHex(false); 
+0

ऊपरी आवरण का महत्व क्या है? – Blankman

+3

वरीयता का मामला। यही कारण है कि मैंने अपनी विधि में एक पैरामीटर जोड़ा, इसलिए कॉलर –

+0

चुन सकता है यह 'c0de' और' C0DE' के बीच का अंतर है, यह सब कुछ है। –

22

आप Convert.ToBase64String और Convert.FromBase64String का उपयोग आसानी से तारों में बाइट सरणी को परिवर्तित करने के लिए कर सकते हैं।

8

खैर के रूप में यह एक हैश है, यह है, संभवतः मूल्यों है कि एक सामान्य स्ट्रिंग में नहीं दिखाया जा सकता है, इसलिए सबसे अच्छा शर्त है इसे बेस 64 एन्कोडेड स्ट्रिंग में कनवर्ट करें।

string s = Convert.ToBase64String(bytes); 

और प्रयोग

byte[] bytes = Convert.FromBase64(s); 

बाइट्स वापस पाने के लिए।

2

ठीक है, आप स्ट्रिंग कन्स्ट्रक्टर का उपयोग कर सकते हैं जो बाइट्स और एन्कोडिंग लेता है, लेकिन आपको उसमें से स्ट्रिंग का प्रबंधन करना मुश्किल हो जाएगा क्योंकि इसमें बहुत से मजेदार अक्षर हो सकते हैं (शून्य बाइट्स, न्यूलाइन, कंट्रोल चार्स, आदि)

यह करने के लिए एक अच्छा तार के साथ काम करने के लिए आसान है कि प्राप्त करने के लिए आधार 64 के साथ सांकेतिक शब्दों में बदलना करने के लिए सबसे अच्छा तरीका होगा:

string s = Convert.ToBase64String(bytes); 

और वापस एक बाइट सरणी है कि स्ट्रिंग से जाने के लिए:

byte[] bytes = Convert.FromBase64String(s); 
53

मैं हमेशा इस पाया सबसे सुविधाजनक होने के लिए:

string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-",""); 

कुछ अजीब कारण BitConverter बाइट्स के बीच डैश डाल करने के लिए पसंद करती है के लिए, इसलिए की जगह सिर्फ उन्हें निकाल देता है।

अद्यतन: यदि आप "लोअरकेस" हेक्स पसंद करते हैं, तो बस एक करें .लोवर() और बूम।

ध्यान दें कि यदि आप इसे एक तंग लूप के रूप में कर रहे हैं और कई सेशन यह महंगा हो सकता है क्योंकि कम से कम दो अंतर्निहित स्ट्रिंग कास्ट और आकार बदल रहा है।

+0

@ फिलिपपेलेबर्ट समाधान के समान है, लेकिन एक पंक्ति में। – sonjz

12

यदि आप 'हेक्स वरीयता' शिविर में हैं तो आप यह कर सकते हैं। फिलिप लेबेर्ट द्वारा यह मूल रूप से उत्तर का एक न्यूनतम संस्करण है।

string.Concat(hash.Select(x => x.ToString("X2"))) 

B1DB2CC0BAEE67EA47CFAEDBF2D747DF

0

रुचि किसी को मेरे द्वारा बनाए गए एक Nuget पैकेज आप बाइट सरणियों के साथ चारों ओर खेलने के लिए बिना, एक अच्छा साफ सिंटैक्स का उपयोग एक टुकड़े किए गए स्ट्रिंग के लिए एक स्ट्रिंग कन्वर्ट करने के लिए अनुमति देता है CryptoStringify कहा जाता है के लिए:

using (MD5 md5 = MD5.Create()) 
{ 
    string strHashedPassword = md5.Hash(password); 
} 

यह पर एक विस्तार विधि HashAlgorithm और KeyedHashAlgorithm तो भी SHA1, HMACSHA1, SHA256 आदि पर काम करता है।

https://www.nuget.org/packages/cryptostringify

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