سؤال

لقد واجهت مشكلة مثيرة للاهتمام .. يبدو أن computehash () لـ "hmacsha256" لا يتصرف بشكل محدد .. إذا قمت بإنشاء حالتين من hashalgorithm باستخدام hashalgorithm.create ("hmacsha256") .. وتشغيل computehash ، أحصل على نتيجتين مختلفتين .. فيما يلي مثال فئة ثابتة تعرض هذا السلوك.

internal static string HashPassword(byte[] bAll)
{
    using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
    {
        return Convert.ToBase64String(s.ComputeHash(bAll));
    }
}

لقد حاولت أيضًا إجراء المكالمة غير ثابتة (في الواقع بدأت غير ثابتة ، وقد قمت بفحص صفيف الإدخال المزدوج والثلاث والرباعي. نافذة مثل:

Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)

وتشغيل ذلك مرتين في نافذة الإلهام عبر نقطة توقف في الطريقة بإرجاع تجزئة مختلفين ..

أعلم أنه من المفترض أن يكون hash حتميًا .. فما الذي يعطي؟ هل شيء ما يحدث مع الجري في مصحح أخطاء؟ أو أي أفكار أخرى؟ حقا هذا مجرد غريبان للكلمات الآن: p ..

شكرا جوش

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

المحلول

HMAC هو تجزئة مفتاح. لا أرى المفتاح في رمز المثال الخاص بك.

HashAlgorithm.Create("HMACSHA256") يخلق مثيل Hashalgorithm ، لذلك لا يعرف أي شيء عن المفتاح. من المحتمل أنها مجرد مكالمات هذا مُنشئ HMACSHA256:

public HMACSHA256()

تهيئة مثيل جديد لفئة HMACSHA256 مع أ مفتاح تم إنشاؤه عشوائيا.

انت تريد هذا المنشئ:

public HMACSHA256(byte[] key)

تهيئة مثيل جديد لفئة HMACSHA256 مع بيانات المفاتيح المحددة.

إذا كنت لا ترغب في ترميز خوارزمية HMAC ، فيمكنك استخدامها Keyedhashalgorithm.create وتزويد مفتاح معين عن طريق تعيين Keyedhashalgorithm.key منشأه.

إذا كنت لا ترغب في استخدام مفتاح ، فاستخدم تجزئة غير مفصلية مثل SHA256.

نصائح أخرى

مجرد إضافة إلى هذا على أمل أن ينقذ شخص ما الصداع الذي مررت به.

في حالة ما اذا .NET مزود العضوية, ، تأكد من أن لديك الإعداد في web.config أو app.config. وإلا فإنه سيقوم تلقائيًا بإنشاء مفتاحه الخاص ... هراء على المصادقة ، ثم يضحك عليك في النهاية.

تحتاج إلى مفتاح HMACSHA256. سيكون المفتاح عشوائيًا إذا لم يتم تمريره إلى المنشئ.

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