سؤال

لدي سلسلة ثنائية (كما هو موضح في سداسي عشر أدناه) وأنا باستخدام CRC-16-CCITT.أريد أن يخرج كل رسائل CRCS الخاصة بي إلى قيمة مجموعة، 0x1d0f.أعلم أنه من الممكن جعل CRCS تطابق هذه القيمة من خلال إلحاق بايتان بايت حتى نهاية الرسالة الأصلية، لكنني لست متأكدا من كيفية معرفة ما يجب أن تكون القيمة الملحقة.

السابقين.

0x01 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 13D8

القيمة الملحقة هي 0x13d8

عن طريق إضافة هذا 13D8 على الرسالة التي تعطيني اتفاقية حقوق الطفل 0x1d0f المطلوب.

أي مساعدة حول كيفية حساب قيمة 0x13d8 هذه ستكون موضع تقدير كبير.

إذا كان من الممكن الانتهاء بدقة في التعليمات البرمجية التي تكون المكافأة!

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

المحلول

النظرية بسيطة للغاية، ولكن بالطبع يتطلب الأمر بعض العناية بالتنفيذ بشكل صحيح.

يمكنك اختيار أي 16 بت في أي مكان في الرسالة (بما في ذلك BYTES في النهاية أو 16 بت فردا متناثرة أينما كنت تحب) غير محددة. اتصل بهم xi ل i= 0..15 . ثم استخدم خوارزمية CRC Bit Bit لمعالجة الرسالة، ولكن توليد وتحديث معاملات 16 معادلات خطية في xi ، تمثل 16 بت من اتفاقية حقوق الطفل.

لديك ثم لديك معادلة مصفوفة بسيطة AX + B= C . العمليات الخاصة ب AX + B= C ليست هي الضرب المعتاد والإضافة، بل العمليات الفردية و أو أو . < / ص>

الآن تستخدم الأساليب المعتادة لتعكس المصفوفة ، وهو أمر أسهل بالفعل مع و و XOR (الإضافة والطرح الآن كلاهما نفس الشيء، فقط الحصري - أو)، وحسب b ^ c وضرب ذلك بواسطة معكوس. الآن لديك القيم لوضعها في البتات xi للحصول على اتفاقية حقوق الطفل المرغوبة.

تبسيط إضافي هو أنك لا تحتاج إلى الرسالة الفعلية، فقط الطول وموقع xi ، ثم قم بما سبق بكل أجزاء أخرى من الرسالة التي تم تعيينها إلى الصفر وبعد هذا لأنه إذا كان لديك رسالتين p و q من نفس الطول، ثم crc (p) ^ crc (q)= crc (p ^ q) . (ينطبق هذا على خوارزمية CRC الأساسية، وتجاهل ما قبل وبعد معالجة CRC.)

تحديث:

يمكنك تنزيل spoof.c ، والتي تحل مشكلة تعديل رسالة لإنتاج اتفاقية حقوق الطفل معينة .

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