उपयोग कैसे करें
- टेक्स्ट टाइप या पेस्ट करें, रॉ बाइट के लिए इनपुट को “हेक्स” पर करें, या किसी फ़ाइल की सामग्री का चेकसम निकालने के लिए “फ़ाइल खोलें” पर क्लिक करें।
- ZIP, gzip और PNG फ़ाइलों के लिए CRC-32 को ही चुना रहने दें, या iSCSI, ext4, Btrfs और Google Cloud Storage में इस्तेमाल होने वाले चेकसम के लिए “एल्गोरिदम” में CRC-32C चुनें।
- “आउटपुट प्रकार” में चुनें: “hex (छोटे अक्षर)”, “HEX (बड़े अक्षर)”, “दशमलव” या “Base64”।
- जाँचने के लिए अपेक्षित चेकसम को “इससे तुलना करें” में पेस्ट करें: 0x के बिना हेक्स, दशमलव या Base64 के रूप में।
CRC32 चेकसम क्या है
साइक्लिक रिडंडेंसी चेक (CRC) इनपुट को एक लंबे बाइनरी बहुपद (पॉलिनोमियल) की तरह मानता है, उसे एक निश्चित जनरेटर बहुपद से भाग देता है और शेषफल रख लेता है। CRC-32 में शेषफल 32 बिट का होता है, जिसे आमतौर पर 8 हेक्स अंकों में या 0 से 4,294,967,295 तक की अचिह्नित (unsigned) संख्या के रूप में लिखा जाता है। डेटा में लगभग कोई भी बदलाव शेषफल को बदल देता है।
CRC उन त्रुटियों के लिए डिज़ाइन किए गए हैं जो असली केबल, रेडियो और डिस्क में होती हैं। CRC-32 32 बिट तक लंबे ख़राब बिटों के हर बर्स्ट को पकड़ लेता है, और कोई रैंडम ख़राबी लगभग 4.3 अरब में से केवल एक मामले में ही अनदेखी रहती है। इसकी गणना भी बहुत तेज़ होती है, इसीलिए यह ZIP, gzip, PNG और Ethernet फ़्रेम में शामिल है।
CRC-32 और CRC-32C
| CRC-32 | CRC-32C (Castagnoli) | |
|---|---|---|
| बहुपद | 0x04C11DB7, रिफ़्लेक्टेड 0xEDB88320 | 0x1EDC6F41, रिफ़्लेक्टेड 0x82F63B78 |
123456789 का चेक मान | cbf43926 | e3069283 |
| कहाँ उपयोग होता है | ZIP, gzip, PNG, Ethernet | iSCSI, SCTP, ext4 मेटाडेटा, Btrfs, Google Cloud Storage |
| हार्डवेयर सपोर्ट | ARMv8 CRC32 निर्देश | x86 SSE4.2 crc32 निर्देश, ARMv8 |
दोनों 0xFFFFFFFF से शुरू होते हैं, हर बाइट के बिट सबसे कम महत्वपूर्ण बिट से शुरू करके प्रोसेस करते हैं और अंतिम मान को उलट (invert) देते हैं; केवल बहुपद अलग है, इसलिए एक ही डेटा से दो असंबंधित परिणाम मिलते हैं। ज़्यादातर टूल "CRC32" से पहले वाले को ही समझते हैं, और इसे CRC-32/ISO-HDLC नाम से सूचीबद्ध किया गया है। CRC-32C को बाद में स्टोरेज और नेटवर्क प्रोटोकॉल ने उसकी बेहतर त्रुटि पहचान के कारण अपनाया। Google Cloud Storage CRC-32C को, और Amazon S3 दोनों में से किसी भी वेरिएंट को, बिग-एंडियन क्रम में चार बाइट के Base64 के रूप में देता है, और Base64 आउटपुट ठीक यही दिखाता है।
चेकसम है, सुरक्षा जाँच नहीं
CRC दुर्घटनाओं से बचाता है, हमलों से नहीं। यह एक रैखिक (linear) फ़ंक्शन है, इसलिए कोई भी व्यक्ति फ़ाइल बदलकर फिर चार बाइट ऐसे समायोजित कर सकता है कि उसका CRC-32 न बदले। इसलिए CRC का मेल खाना जान-बूझकर की गई छेड़छाड़ के बारे में कुछ साबित नहीं करता। किसी डाउनलोड की जाँच के लिए भरोसेमंद स्रोत से मिले SHA-256 हैश से तुलना करें; संदेश किसने भेजा, यह साबित करने के लिए HMAC का उपयोग करें।
डेटा की पहचान के लिए भी 32 बिट बहुत कम हैं। लगभग 77,000 रैंडम फ़ाइलों में से किन्हीं दो का CRC-32 एक जैसा होने की संभावना पहले ही 50% तक पहुँच जाती है, इसलिए इसे यूनिक ID या डुप्लिकेट हटाने की कुंजी के रूप में इस्तेमाल न करें। जहाँ कोई हमलावर शामिल न हो, वहाँ MD5 या SHA-256 कहीं बेहतर फ़िंगरप्रिंट होते हैं।
कोड में CRC32
# Python: Python 3 में zlib.crc32 अचिह्नित (unsigned) होता है;
# "& 0xffffffff" केवल Python 2 के लिए ज़रूरी है
import zlib
format(zlib.crc32(b'123456789'), '08x') # 'cbf43926'
// Node.js 20.15+ और 22.2+
require('zlib').crc32('123456789').toString(16).padStart(8, '0') // 'cbf43926'
// Go (import "hash/crc32")
crc32.ChecksumIEEE(data) // CRC-32
crc32.Checksum(data, crc32.MakeTable(crc32.Castagnoli)) // CRC-32C
// Java: java.util.zip.CRC32, और Java 9 से java.util.zip.CRC32C
// PHP
sprintf('%08x', crc32('123456789')); // 'cbf43926'
hash('crc32b', '123456789'); // 'cbf43926', वही CRC-32
hash('crc32c', '123456789'); // 'e3069283'
hash('crc32', '123456789'); // '181989fc', एक अलग CRC
PHP में नामों पर ध्यान दें: crc32 नाम का हैश एल्गोरिदम ZIP वाला चेकसम नहीं, बल्कि bzip2 में इस्तेमाल होने वाला CRC है, जिसे उलटे बाइट क्रम में प्रिंट किया जाता है। ZIP, gzip और इस टूल से मेल के लिए crc32b या crc32() फ़ंक्शन का उपयोग करें। Unix की cksum कमांड एक और वेरिएंट का उपयोग करती है जिसमें फ़ाइल की लंबाई भी मिलाई जाती है, इसलिए उसकी संख्या इन दोनों में से किसी से भी मेल नहीं खाएगी।
उदाहरण
| इनपुट (UTF-8) | CRC-32 |
|---|---|
Hello, World! | ec4ac3d0 |
Base64.is | 915d7207 |
你好 | 50a2b841 |
अक्सर पूछे जाने वाले प्रश्न
"123456789" का CRC32 क्या है?
cbf43926 (दशमलव में 3421780262) है और CRC-32C e3069283 है। अगर आपका अपना इम्प्लीमेंटेशन यही मान लौटाता है, तो वह इस टूल जैसे ही पैरामीटर का उपयोग करता है।मेरा CRC32 किसी दूसरे टूल से अलग क्यों है?
cksum, सभी अलग परिणाम देते हैं), इनपुट बाइट (लाइन एंडिंग, अंत में न्यूलाइन, टेक्स्ट एनकोडिंग), संख्या का फ़ॉर्मैट (कुछ भाषाएँ चिह्नित यानी signed 32-बिट पूर्णांक लौटाती हैं, जिससे बड़े मान ऋणात्मक हो जाते हैं), और बाइट क्रम।मेरी ZIP या gzip फ़ाइल के अंदर CRC के बाइट उलटे क्यों हैं?
unzip -v और ज़्यादातर दूसरे प्रोग्राम सबसे महत्वपूर्ण बाइट पहले प्रिंट करते हैं।क्या बड़ी फ़ाइल का CRC32 निकाला जा सकता है?
हाँ। “फ़ाइल खोलें” पर क्लिक करें, और चेकसम फ़ाइल के बाइट से आपके डिवाइस पर ही निकाला जाता है, बिना अपलोड किए; कोई भी फ़ाइल जिसे आपका ब्राउज़र मेमोरी में रख सके, काम करती है। इसके बाद आप परिणाम की तुलना SFV फ़ाइल या ZIP लिस्टिंग में दिए मान से कर सकते हैं।
क्या CRC32 एक हैश फ़ंक्शन है?
यह किसी भी लंबाई के डेटा को एक निश्चित 32-बिट मान में बदलता है, इसलिए इसे अक्सर हैश के साथ सूचीबद्ध किया जाता है, लेकिन यह एक चेकसम है: यह आकस्मिक त्रुटियाँ पकड़ता है और जान-बूझकर डेटा बदलने वाले व्यक्ति से कोई सुरक्षा नहीं देता। जब आपको ज़्यादा मज़बूत फ़िंगरप्रिंट चाहिए, तो परिणाम के नीचे “सभी एल्गोरिदम” तालिका उसी इनपुट के लिए MD5 और SHA परिवार के हैश दिखाती है।