CRC32 के लिए बहुपद है:
x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 7 + x 5 + x 4 + x 2 + x + 1
या हेक्स और बाइनरी में:
0x 01 04 C1 1D B7
1 0000 0100 1100 0001 0001 1101 1011 0111
उच्चतम शब्द (x 32 ) आमतौर पर स्पष्ट रूप से नहीं लिखा जाता है, इसलिए इसे उसी तरह से हेक्स में दर्शाया जा सकता है
0x 04 C1 1D B7
1s और 0s को गिनने के लिए स्वतंत्र महसूस करें, लेकिन आप पाएंगे कि वे बहुपद के साथ मेल खाते हैं, जहां 1
बिट 0 (या पहली बिट) और x
बिट 1 (या दूसरी बिट) है।
यह बहुपद क्यों है? क्योंकि एक मानक दिए गए बहुपद होने की आवश्यकता है और मानक IEEE 802.3 द्वारा निर्धारित किया गया था। इसके अलावा एक बहुपद को खोजना बहुत मुश्किल है जो विभिन्न बिट त्रुटियों को प्रभावी ढंग से पता लगाता है।
आप सीआरसी -32 को "बाइनरी अरिथमेटिक विद नो कैर्रीज़" या मूल रूप से "एक्सओआर और शिफ्ट ऑपरेशंस" की एक श्रृंखला के रूप में सोच सकते हैं। इसे तकनीकी रूप से बहुपद अंकगणित कहा जाता है।
इसे बेहतर ढंग से समझने के लिए, इस गुणन के बारे में सोचें:
(x^3 + x^2 + x^0)(x^3 + x^1 + x^0)
= (x^6 + x^4 + x^3
+ x^5 + x^3 + x^2
+ x^3 + x^1 + x^0)
= x^6 + x^5 + x^4 + 3*x^3 + x^2 + x^1 + x^0
यदि हम मान लेते हैं कि x का आधार 2 है तो हम प्राप्त करते हैं:
x^7 + x^3 + x^2 + x^1 + x^0
क्यों? क्योंकि 3x ^ 3 11x ^ 11 है (लेकिन हमें केवल 1 या 0 पूर्व अंक की आवश्यकता है) इसलिए हम आगे बढ़ते हैं:
=1x^110 + 1x^101 + 1x^100 + 11x^11 + 1x^10 + 1x^1 + x^0
=1x^110 + 1x^101 + 1x^100 + 1x^100 + 1x^11 + 1x^10 + 1x^1 + x^0
=1x^110 + 1x^101 + 1x^101 + 1x^11 + 1x^10 + 1x^1 + x^0
=1x^110 + 1x^110 + 1x^11 + 1x^10 + 1x^1 + x^0
=1x^111 + 1x^11 + 1x^10 + 1x^1 + x^0
लेकिन गणितज्ञों ने नियम बदल दिए ताकि यह मॉड 2 हो जाए। तो हमारा मूल समीकरण इस तरह दिखता है:
=( 1x^110 + 1x^101 + 1x^100 + 11x^11 + 1x^10 + 1x^1 + x^0 ) MOD 2
=( 1x^110 + 1x^101 + 1x^100 + 1x^11 + 1x^10 + 1x^1 + x^0 )
= x^6 + x^5 + x^4 + 3*x^3 + x^2 + x^1 + x^0 (or that original number we had)
मुझे पता है कि यह विश्वास की एक छलांग है लेकिन यह लाइन-प्रोग्रामर के रूप में मेरी क्षमता से परे है। यदि आप एक हार्ड-कोर सीएस-छात्र या इंजीनियर हैं तो मैं इसे तोड़ने की चुनौती देता हूं। इस विश्लेषण से सभी को लाभ होगा।
तो एक पूर्ण उदाहरण बाहर काम करने के लिए:
Original message : 1101011011
Polynomial of (W)idth 4 : 10011
Message after appending W zeros : 11010110110000
अब हम CRC अंकगणित का उपयोग करके पाली द्वारा संवर्धित संदेश को विभाजित करते हैं। यह पहले जैसा ही विभाजन है:
1100001010 = Quotient (nobody cares about the quotient)
_______________
10011 ) 11010110110000 = Augmented message (1101011011 + 0000)
=Poly 10011,,.,,....
-----,,.,,....
10011,.,,....
10011,.,,....
-----,.,,....
00001.,,....
00000.,,....
-----.,,....
00010,,....
00000,,....
-----,,....
00101,....
00000,....
-----,....
01011....
00000....
-----....
10110...
10011...
-----...
01010..
00000..
-----..
10100.
10011.
-----.
01110
00000
-----
1110 = Remainder = THE CHECKSUM!!!!
विभाजन एक भागफल देता है, जिसे हम दूर फेंक देते हैं, और एक शेष, जो गणना की गई चेकसम है। इससे गणना समाप्त हो जाती है। आमतौर पर, चेकसम को फिर संदेश में जोड़ा जाता है और परिणाम प्रसारित होता है। इस स्थिति में ट्रांसमिशन होगा: 11010110111110।
केवल 32-बिट संख्या को अपने भाजक के रूप में उपयोग करें और अपनी पूरी धारा को अपने लाभांश के रूप में उपयोग करें। भागफल बाहर फेंक दो और शेष रखो। अपने संदेश के अंत में शेष भाग लें और आपके पास CRC32 है।
औसत आदमी की समीक्षा:
QUOTIENT
----------
DIVISOR ) DIVIDEND
= REMAINDER
- पहले 32 बिट्स लें।
- बिट्स शिफ्ट करें
- यदि 32 बिट्स डिविसोर से कम हैं, तो चरण 2 पर जाएं।
- DIVISOR द्वारा XOR 32 बिट्स। चरण 2 पर जाएं।
(ध्यान दें कि धारा को 32 बिट्स द्वारा विभाजित किया जाना चाहिए या इसे गद्देदार किया जाना चाहिए। उदाहरण के लिए, 8-बिट ANSI स्ट्रीम को गद्देदार करना होगा। धारा के अंत में भी विभाजन रुका हुआ है।)
0xEDB88320
भी msbit-first ( सामान्य ) के रूप में लिखा जा सकता है0x04C11DB7
। क्या तालिका मान जो आपने कहीं और पाया वही सीआरसी बहुपद का उपयोग करके उत्पन्न किया गया?