سؤال

كيف يمكنني تحويل النتيجة الفحص، وهي صفيف بايت، إلى سلسلة؟

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

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

أحتاج إلى تحويل byteHashedPassword إلى سلسلة.

هل كانت مفيدة؟

المحلول

   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);

نصائح أخرى

وجدت دائما أن هذا هو الأكثر ملاءمة:

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

بالنسبة لبعض الأسباب الغريبة يحب bitconverter وضع شرطات بين البايتات، لذلك استبدال فقط يزيلهم.

تحديث: إذا كنت تفضل "عرافة" صغيرة "، فما عليك سوى القيام بالقلق () والازدهار.

لاحظ أنه إذا كنت تقوم بذلك كحلقة ضيقة والعديد من عمليات العمليات قد تكون مكلفة لأن هناك ما لا يقل عن اثنين من طرح سلسلة ضمنية وتغيير حجمها.

يمكنك استخدام Convert.ToBase64String و Convert.FromBase64String لتحويل صفيفات البايت بسهولة إلى سلاسل.

إذا كنت في معسكر "Hex Treference"، فيمكنك القيام بذلك. هذا هو أساسا إصدار الحد الأدنى من إجابة فيليب ليبارت.

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

B1DB2CC0BAEE67EA47CFAEDBF2D747DF

حسنا، كما هو الحال، فمن المحتمل أن تكون قيم لا يمكن عرضها في سلسلة عادية، لذلك أفضل رهان هو تحويله إلى سلسلة مشفرة Base64.

string s = Convert.ToBase64String(bytes);

واستخدام

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

للحصول على البايتات مرة أخرى.

حسنا، يمكنك استخدام منشئ السلسلة الذي يأخذ بايتات وترميز، ولكن من المحتمل أن تحصل على صعوبة إدارة السلسلة من ذلك لأنه يمكن أن يحتوي على الكثير من الأحرف الممتعة (بايت NULL BYTES، NEWLINES، ARS للتحكم، إلخ)

أفضل طريقة للقيام بذلك ستكون تشفيرها مع قاعدة 64 للحصول على سلسلة لطيفة من السهل العمل مع:

string s = Convert.ToBase64String(bytes);

والذهاب من تلك السلسلة إلى صفيف بايت:

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

لأي شخص مهتم حزمة Nuget التي أنشأتها دعا cryptoStringify. يسمح لك بتحويل سلسلة إلى سلسلة علامة مزودة باستخدام بناء جملة نظيف لطيفة، دون الحاجة إلى اللعب مع صفائف بايت:

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

انها طريقة تمديد على HashAlgorithm و KeyedHashAlgorithm حتى يعمل على SHA1، HMACSHA1، SHA256 إلخ أيضا.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top