मैं बाइट द्वारा ईथरनेट पैकेट बाइट के फ्रेम चेक अनुक्रम (एफसीएस) की गणना करने की कोशिश कर रहा हूं। बहुपद 0x104C11DB7
है। मैं XOR-शिफ़्ट एल्गोरिथ्म यहाँ देखा http://en.wikipedia.org/wiki/Cyclic_redundancy_check या यहाँ http://www.woodmann.com/fravia/crctut1.htmईथरनेट सीआरसी 32 गणना - सॉफ्टवेयर बनाम एल्गोरिदमिक परिणाम
पालन जानकारी है कि माना जाता है कि एक सीआरसी केवल एक बाइट है मान लें किया था। मान लें कि यह 0x03 है।
कदम: सही
0x0300000000
करने के लिए 32 बिट के साथ पैड बहुपद और अपनी पहली बिट के साथ बाएं हाथ की ओर है कि शून्य नहीं है पर डेटा संरेखित और उन्हें
XOR0x300000000 xor 0x209823B6E = 0x109823b6e
ले शेष संरेखित और XOR फिर
0x109823b6e xor 0x104C11DB7 = 0x0d4326d9
देखते हैं के बाद से कोई और अधिक बिट छोड़ दिया 0x03 की CRC32 0x0d4326d9
होना चाहिए दुर्भाग्य से सभी सॉफ्टवेयर कार्यान्वयन मुझे बताओ मैं गलत हूँ, लेकिन मैं गलत क्या किया या क्या क्या वे अलग-अलग कर रहे हैं?
अजगर मुझसे कहता है:
"0x%08x" % binascii.crc32(chr(0x03))
0x4b0bbe37
ऑनलाइन उपकरण यहाँ http://www.lammertbies.nl/comm/info/crc-calculation.html#intr एक ही परिणाम हो जाता है। मेरे हाथ की गणना और उल्लिखित सॉफ़्टवेयर उपयोगों के एल्गोरिदम के बीच क्या अंतर है?
अद्यतन:
बाहर बदल जाता है एक ऐसी ही सवाल ढेर अतिप्रवाह पर पहले से ही वहाँ था:
आप हालांकि इस बहुत सहज ज्ञान युक्त नहीं है एक जवाब यहाँ Python CRC-32 woes
पाते हैं। आप यह कैसे ईथरनेट के लिए किया जाता है पर एक और अधिक औपचारिक विवरण चाहते हैं फ्रेम आप Ethernet Standard document 802.3 भाग 3 देख सकते हैं - अध्याय 3.2.9 फ्रेम अनुक्रम फील्ड चेक
चलें ऊपर से एक उदाहरण के लिए जारी:
अपने संदेश के बिट ऑर्डर को उलट दें। यह रिसीवर बिट में थोड़ा सा तरीका आने के तरीके का प्रतिनिधित्व करता है।
0x03
इसलिए0xC0
अपने संदेश के पहले 32 बिट पूरक है। ध्यान दें कि हम 32 बिट के साथ एकल बाइट पैड करते हैं।
0xC000000000 xor 0xFFFFFFFF = 0x3FFFFFFF00
फिर ऊपर से Xor और पारी विधि को पूरा करें। के बारे में 6 चरण के बाद आपको मिलेगा:
0x13822f2d
ऊपर बिट sequense तो पूरित है।
0x13822f2d xor 0xFFFFFFFF = 0xec7dd0d2
याद रखें कि हम थोड़ा आदेश चरण एक में ईथरनेट तार पर प्रतिनिधित्व प्राप्त करने के लिए उलट दिया। अब हमें इस कदम को पीछे हटाना है और हम अंततः अपनी खोज को पूरा करते हैं।
0x4b0bbe37
जो कोई भी यह होना चाहिए करने का इस तरह के साथ आया था ...
आप वास्तव में यह संदेश आप प्राप्त जानना चाहता हूँ कई बार सही है। इसे प्राप्त करने के लिए आप एफसीएस सहित अपना प्राप्त संदेश लेते हैं और उपर्युक्त चरण 1 से 5 तक करते हैं। नतीजा यह होना चाहिए कि वे अवशेष कहें। जो किसी दिए गए बहुपद के लिए निरंतर है। इस मामले में यह 0xC704DD7B
है।
mcdowella का उल्लेख है जब तक आप इसे सही हो, आवेदन आप उपयोग कर रहे हैं पर निर्भर करता अपने बिट्स के साथ चारों ओर खेलने के लिए है के रूप में।
0x209823B6E कहां से आता है? – grieve
क्या आपने अपना प्रारंभिक शेष 0xFFFFFFFF – grieve
0x209823B6E को बहुपद के एक स्थानांतरित संस्करण को – sebs