سؤال

أنا مبتدئ تشفير يحاول اجتياز بعض القيم ذهابا وإيابا بين الأنظمة. يمكنني تشفير القيمة، ولكن لا يبدو أن معرفة كيفية فك تشفيرها في الطرف الآخر. لقد قمت بإنشاء تطبيق Windows Forms بسيط باستخدام VB.NET. محاولة إدخال قيمة ومفتاح، تشفير ثم فك تشفيرها للحصول على القيمة الأصلية. ها هي رمزي حتى الآن. أي مساعدة موضع تقدير كبير. شكرا.

Imports System
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text

Public Class Form1

    Private Sub btnEncode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncode.Click
        Dim hmacsha1 As New HMACSHA1(Encoding.ASCII.GetBytes(txtKey.Text))
        Dim hashValue As Byte() = hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(txtValue.Text))
        txtResult.Text = BytesToHexString(hashValue)
        hmacsha1.Clear()
    End Sub

    Private Sub btnDecode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecode.Click
        '???
    End Sub

    Private Function BytesToHexString(ByVal bytes As Byte()) As String
        Dim output As String = String.Empty
        Dim i As Integer = 0
        Do While i < bytes.Length
            output += bytes(i).ToString("X2")
            i += 1
        Loop
        Return output
    End Function
End Class
هل كانت مفيدة؟

المحلول

HMAC-SHA1 هو اتجاه واحد هاش, ، وليس ثنائي الاتجاه تشفير خوارزمية. لا يمكنك فك تشفيرها. ليس لدي وقت لتوفير رمز التشفير الكامل هنا - إنه موضوع معقد، لكن Barry Dorrans "بداية الأمن ASP.NET" سوف أعطيك نقطة انطلاق جيدة. (بعضها فقط هو ASP.NET - خاص به.) يمكنك أيضا مشاهدة له التحدث DDD في هذا الموضوع.

نصائح أخرى

فقط للتوسع في إجابة جون، لأنك ربما تتساءل عن نقطة تشفير شيء لا يمكنك فك تشفيره - HMAC-SHA1، كما قال جون، هاش. لا تحتوي السلسلة المنتجة على المعلومات الأصلية، حتى في النموذج المشفهر ... إنها مجرد سلسلة من البايتات.

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

على سبيل المثال،

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

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

Encyryption / Hashes هي أعمال FIDDLY، ولدي بالكاد خدش السطح بنفسي - لكنني اعتقدت أن هذا قد يمنحك مثالا بسيطا على ما يتم استخدام الخلاصات ...

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

مارتن

شرح بسيطة في اتجاه واحد لسبب لماذا يريد الناس القيام بذلك.

دعونا نقول أن لديك حساب مستخدم مع اسم المستخدم يوحنا وكلمة المرور Doe. يمكنك تخزين التجزئة من السلسلة التالية.

الاسم الأول، الرقم المفضل لديك، وكلمة المرور المحددة

على سبيل المثال: Hash = myhash (كلمة المرور john7 @ ")

             now hash = "qk239qa*@$)(*84509053903" or whatever

الآن أن التجزئة آمنة ولا يمكن عكسها مرة أخرى لمعرفة ما هو رقمك المفضل في معظم الحالات. للتحقق مما إذا كان التجزئة هو الصحيح لتسجيل الدخول، كنت ترغب في إعادة التوجيه الإدخال المرفق (الاسم أو رقمك أو W / E وكلمة المرور) وإذا حصلت على نفس التجزئة الدقيقة، فإنها صفقة صالحة. WO0T ليس بسيطة تماما!

- أستخدم نفس المفتاح لإعادة تجزئة بياناتي؟

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