سؤال

على هذه الصفحة:

http://www.shutterfly.com/documentation/OflyCallSignature.sfly

يقول عندما تولد تجزئة ثم:

تحويل تجزئة عشري سلسلة الأحرف

هل هناك قانون في csharp أن تفعل هذا ؟

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

المحلول

للحصول على التجزئة ، استخدام System.Security.Cryptography.SHA1Managed الدرجة.

تحرير:مثل هذا:

byte[] hashBytes = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(str));

لتحويل التجزئة إلى hex string استخدام التعليمات البرمجية التالية:

BitConverter.ToString(hashBytes).Replace("-", "");

إذا كنت ترغب في أسرع تنفيذ استخدم الدالة التالية:

private static char ToHexDigit(int i) {
    if (i < 10) 
        return (char)(i + '0');
    return (char)(i - 10 + 'A');
}
public static string ToHexString(byte[] bytes) {
    var chars = new char[bytes.Length * 2 + 2];

    chars[0] = '0';
    chars[1] = 'x';

    for (int i = 0; i < bytes.Length; i++) {
        chars[2 * i + 2] = ToHexDigit(bytes[i] / 16);
        chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);
    }

    return new string(chars);
}

نصائح أخرى

لا أستطيع التعليق بعد, لا يكفي rep, ولكن ليئور هو خلط جافا مع C# في إجابة خاطئة جدا.

بايت في C# هي غير موقعة بايت ، وهو العكس تماما من كل أنواع العدد في C# ، التي وقعت بشكل افتراضي.

على 0xFF جزء من المجدي تماما لأنه حتى إذا بايت تم توقيع 0xFE على سبيل المثال هو -2.باستخدام المعامل و مع 0xFE و 0xFF ، على سبيل المثال ، لن تتوقف عن السلبية عدد 0xFE من نتائج.0x7F شأنه.

فيما يتعلق أعلى الإجابة ، أنا متأكدة أن هذه الصغرى تحسينات قد تساعد ، ولو أنهم الصغرى التحسينات التي من المرجح أن لا تجعل أي فرق حقيقي لأن التحويل البرمجي JIT قد تفعل شيئا آخر لأن أجهزة الكمبيوتر فقط أيضا اشتعلت فيه النيران بسرعة.

    chars[2 * i + 2] = ToHexDigit(bytes[i] / 16);
    chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);

صغيرة تجعل من استخدام bitshift و المعامل العمليات بدلا من مقسم نمطية.

    chars[2 * i + 2] = ToHexDigit((bytes[i] >> 4) & 0xF);
    chars[2 * i + 3] = ToHexDigit(bytes[i] & 0xF);

هذا هو "الأمثل" ، على الرغم من أنني أرى أنها أكثر قابلية للقراءة شيء.ربما لأن أعرف أكثر من جدول ASCII عن ظهر قلب.

    private static char ToHexDigit(int i)
    {
        return (char)(i + (i < 10 ? 48 : 55));
    }

إذا كنت تحاول تحقيق حالة انخفاض عرافة (دون ToLower), مجرد مبادلة 55 87.فإنه يجعل من السهل جدا.

تحديث:يبدو ليئور أو أي شخص إزالة له عن إجابة.الذي كان خطوة جيدة.

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