كيف يمكنني تخمين خوارزمية المجموع الاختباري؟

StackOverflow https://stackoverflow.com/questions/149617

  •  02-07-2019
  •  | 
  •  

سؤال

لنفترض أن لدي بعض الحزم ذات المجموع الاختباري 16 بت في النهاية.أود تخمين خوارزمية المجموع الاختباري المستخدمة.

كبداية، من بيانات التفريغ، أستطيع أن أرى أن تغيير بايت واحد في حمولة الحزمة يغير المجموع الاختباري تمامًا، لذا يمكنني أن أفترض أنه ليس نوعًا من XOR أو مجموعًا بسيطًا.

ثم حاولت العديد من الاختلافات في CRC16, ، ولكن من دون الكثير من الحظ.

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

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

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

تفريغ الملفات مع البيانات متاحة إذا كان السؤال نفسه لا يكفي :-)

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

في النهاية، بعد تلميح مفيد جدًا في الإجابة المقبولة، فهي CCITT، Iاستخدم هذه الآلة الحاسبة CRC, ، ومجموع اختباري تم إنشاؤه بواسطة xored مع مجموع اختباري معروف للحصول على 0xffff مما دفعني إلى استنتاج أن xor النهائي هو 0xffff بدلاً من 0x0000 الخاص بـ CCITT.

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

المحلول

هناك عدد من المتغيرات التي يجب مراعاتها في اتفاقية حقوق الطفل:

Polynomial
No of bits (16 or 32)
Normal (LSB first) or Reverse (MSB first)
Initial value
How the final value is manipulated (e.g. subtracted from 0xffff), or is a constant value

مراكز حقوق الطفل النموذجية:

LRC:    Polynomial=0x81; 8 bits; Normal; Initial=0; Final=as calculated
CRC16:  Polynomial=0xa001; 16 bits; Normal; Initial=0; Final=as calculated
CCITT:  Polynomial=0x1021; 16 bits; reverse; Initial=0xffff; Final=0x1d0f
Xmodem: Polynomial=0x1021; 16 bits; reverse; Initial=0; Final=0x1d0f
CRC32:  Polynomial=0xebd88320; 32 bits; Normal; Initial=0xffffffff; Final=inverted value
ZIP32:  Polynomial=0x04c11db7; 32 bits; Normal; Initial=0xffffffff; Final=as calculated

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

هل هذه خوارزمية "محلية الصنع".في هذه الحالة قد يستغرق الأمر بعض الوقت.بخلاف ذلك، جرب الخوارزميات القياسية.

حاول تغيير msb أو lsb للبايت الأخير، وانظر كيف يغير هذا CRC.هذا سوف يعطي إشارة إلى الاتجاه.

ولجعل الأمر أكثر صعوبة، هناك تطبيقات تتلاعب باتفاقية حقوق الطفل بحيث لا تؤثر على وسيلة الاتصال (البروتوكول).

من تعليقك حول RFID، فهذا يعني أن اتفاقية حقوق الطفل تتعلق بالاتصالات.عادةً ما يتم استخدام CRC16 للاتصالات، على الرغم من استخدام CCITT أيضًا في بعض الأنظمة.

من ناحية أخرى، إذا كان هذا هو وضع علامات UHF RFID، فهناك عدد قليل من مخططات CRC - واحدة 5 بت وبعضها 16 بت.وقد تم توثيق ذلك في معايير ISO وأوراق بيانات IPX.

IPX:  Polynomial=0x8005; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6B: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6C: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
    Data must be padded with zeroes to make a multiple of 8 bits
ISO CRC5: Polynomial=custom; 5 bits; Reverse; Initial=0x9; Final=shifted left by 3 bits
    Data must be padded with zeroes to make a multiple of 8 bits
EPC class 1: Polynomial=custom 0x1021; 16 bits; Reverse; Initial=0xffff; Final=post processing of 16 zero bits

هنا جوابك!!!!

بعد أن تعاملت مع سجلاتك، فإن CRC هي CCITT.يتم استبعاد البايت الأول 0xd6 من اتفاقية حقوق الطفل.

نصائح أخرى

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

أنا حقًا لا أفهم لماذا قد يرغب شخص ما في معرفة ذلك بالرغم من ذلك.

قد لا يكون CRC، قد يكون رمز تصحيح خطأ مثل Reed-Solomon.

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

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

الموقع هو https://defuse.ca/checksums.htm

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