حاسبة المجموع الاختباري CRC32

احسب المجموع الاختباري CRC-32 أو CRC-32C لنص أو بايتات ست عشرية أو ملف كامل، واعرضه بالصيغة الست عشرية أو العشرية أو Base64، وقارنه بقيمة متوقعة. تُقرأ الملفات محليًا ولا تُرفع أبدًا.

جميع الخوارزميات

تعمل بالكامل داخل متصفحك، ولا يُرفع أي شيء.

طريقة الاستخدام

  1. اكتب النص أو الصقه، أو غيّر «صيغة المدخلات» إلى «ست عشري» لإدخال بايتات خام، أو افتح ملفًا عبر «فتح ملف» لحساب المجموع الاختباري لمحتواه.
  2. من قائمة «الخوارزمية»، أبقِ الخيار على CRC-32 لملفات ZIP وgzip وPNG، أو اختر CRC-32C لبروتوكول iSCSI وأنظمة الملفات ext4 وBtrfs وخدمة Google Cloud Storage.
  3. اختر في «صيغة المخرجات»: «ست عشري (أحرف صغيرة)» أو «ست عشري (أحرف كبيرة)» أو «عشري» أو «Base64».
  4. للتحقق، الصق المجموع الاختباري المتوقع في «المقارنة مع»، بالصيغة الست عشرية دون 0x، أو بالصيغة العشرية، أو بترميز Base64.

ما هو المجموع الاختباري CRC32

يتعامل فحص التكرار الدوري (cyclic redundancy check) مع المدخلات كأنها كثيرة حدود ثنائية واحدة طويلة، فيقسمها على كثيرة حدود مولِّدة ثابتة ويحتفظ بالباقي. وفي CRC-32 يتكوّن الباقي من 32 بت، ويُكتب عادةً في صورة 8 أرقام ست عشرية أو عدد بلا إشارة من 0 إلى 4,294,967,295. ويكاد أي تغيير في البيانات يغيّر الباقي.

صُممت خوارزميات CRC لكشف الأخطاء التي تُحدثها الكابلات وأجهزة الراديو والأقراص في الواقع. إذ يكشف CRC-32 كل رشقة من البتات التالفة المتتالية (burst) لا يتجاوز طولها 32 بت، ولا يمر التلف العشوائي دون اكتشاف إلا في نحو حالة واحدة من كل 4.3 مليار حالة. كما أنه سريع الحساب جدًا، ولهذا هو مدمج في ZIP وgzip وPNG وإطارات Ethernet.

CRC-32 وCRC-32C

CRC-32CRC-32C (Castagnoli)
كثيرة الحدود0x04C11DB7، والمعكوسة 0xEDB883200x1EDC6F41، والمعكوسة 0x82F63B78
قيمة التحقق لـ 123456789cbf43926e3069283
الاستخداماتZIP وgzip وPNG وEthernetiSCSI وSCTP وبيانات ext4 الوصفية وBtrfs وGoogle Cloud Storage
الدعم في العتادتعليمات CRC32 في ARMv8تعليمة crc32 في x86 SSE4.2، وARMv8

كلاهما يبدأ من 0xFFFFFFFF، ويعالج بتات كل بايت بدءًا من البت الأقل أهمية، ويقلب بتات القيمة النهائية؛ ولا يختلفان إلا في كثيرة الحدود، لذا تعطي البيانات نفسها نتيجتين لا علاقة بينهما. والأول هو ما تقصده معظم الأدوات بـ «CRC32»، ويُصنَّف باسم CRC-32/ISO-HDLC. أما CRC-32C فقد اعتمدته بروتوكولات التخزين والشبكات لاحقًا لقدرته الأقوى على كشف الأخطاء. وتعرض Google Cloud Storage قيمة CRC-32C، وتعرض Amazon S3 أيًّا من النوعين، بترميز Base64 للبايتات الأربعة بترتيب big-endian، وهذا بالضبط ما تعرضه مخرجات Base64.

مجموع اختباري لا فحص أمني

يحمي CRC من الحوادث لا من الهجمات. فهو دالة خطية، لذا يستطيع أي شخص تعديل ملف ثم ضبط أربعة بايتات ليبقى CRC-32 الخاص به دون تغيير. وبالتالي لا يثبت تطابق CRC شيئًا بشأن التلاعب المتعمد. وللتحقق من ملف تم تنزيله، قارن تجزئة SHA-256 مأخوذة من مصدر موثوق؛ ولإثبات هوية مرسل رسالة ما، استخدم HMAC.

كما أن 32 بت عدد قليل جدًا لتمييز البيانات. فبين نحو 77,000 ملف عشوائي، يبلغ احتمال أن يشترك ملفان في قيمة CRC-32 نفسها 50% بالفعل، لذا لا تستخدمه معرّفًا فريدًا أو مفتاحًا لإزالة التكرار. وحيث لا يوجد مهاجم، تكون MD5 أو SHA-256 بصمات أفضل بكثير.

CRC32 في الشيفرة البرمجية

# Python: تُعيد zlib.crc32 قيمة بلا إشارة في Python 3؛
# ولا يلزم "& 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.util.zip.CRC32C منذ Java 9

// PHP
sprintf('%08x', crc32('123456789'));   // 'cbf43926'
hash('crc32b', '123456789');           // 'cbf43926'، أي CRC-32 نفسه
hash('crc32c', '123456789');           // 'e3069283'
hash('crc32', '123456789');            // '181989fc'، وهو CRC مختلف

انتبه إلى الأسماء في PHP: فخوارزمية التجزئة المسماة crc32 ليست المجموع الاختباري المستخدم في ZIP، بل هي CRC المستخدم في bzip2، مطبوعًا بترتيب بايتات معكوس. استخدم crc32b أو الدالة crc32() لتطابق نتيجتك ZIP وgzip وهذه الأداة. أما الأمر cksum في Unix فيستخدم نوعًا آخر يدمج طول الملف أيضًا، لذا لن يتطابق الرقم الذي يُخرجه مع أيٍّ منهما.

أمثلة

المدخلات (UTF-8)CRC-32
Hello, World!ec4ac3d0
Base64.is915d7207
你好50a2b841

الأسئلة الشائعة

ما قيمة CRC32 للسلسلة «123456789»؟
هذه السلسلة هي مدخلات الاختبار القياسية لخوارزميات CRC. وقيمة CRC-32 لها هي cbf43926 (أي 3421780262 بالنظام العشري)، وقيمة CRC-32C هي e3069283. فإن أعاد تطبيقك الخاص هاتين القيمتين، فهو يستخدم المعاملات نفسها التي تستخدمها هذه الأداة.
لماذا تختلف قيمة CRC32 لديّ عن نتيجة أداة أخرى؟
تحقّق من أربعة أمور: النوع (إذ تعطي CRC-32 وCRC-32C وCRC الخاص بـ bzip2 والأمر cksum في POSIX نتائج مختلفة)، وبايتات المدخلات (نهايات الأسطر، أو سطر جديد زائد في النهاية، أو ترميز النص)، وصيغة الرقم (تُعيد بعض اللغات عددًا صحيحًا بإشارة من 32 بت، فتصبح القيم الكبيرة سالبة)، وترتيب البايتات.
لماذا تظهر بايتات CRC معكوسة داخل ملف ZIP أو gzip؟
يخزّن ZIP وgzip قيمة CRC-32 بترتيب البايتات little-endian، لذا يعرض محرر الست عشري البايتات الأربعة بترتيب معكوس مقارنةً بالكتابة المعتادة. أما PNG فيخزّنها بترتيب big-endian. وتطبع هذه الأداة والأمر unzip -v ومعظم البرامج الأخرى البايت الأكثر أهمية أولًا.
هل يمكنني حساب CRC32 لملف كبير؟

نعم. انقر «فتح ملف» وسيُحسب المجموع الاختباري من بايتات الملف على جهازك دون رفعه؛ ويصلح ذلك لأي ملف يستطيع متصفحك الاحتفاظ به في الذاكرة. ويمكنك بعد ذلك مقارنة النتيجة بالقيمة الواردة في ملف SFV أو في قائمة محتويات ملف ZIP.

هل CRC32 دالة تجزئة؟

يحوّل CRC32 بيانات بأي طول إلى قيمة ثابتة من 32 بت، لذا كثيرًا ما يُدرج مع دوال التجزئة، لكنه مجموع اختباري: يكشف الأخطاء العرضية ولا يوفر أي حماية ممن يغيّر البيانات عمدًا. وعندما تحتاج إلى بصمة أقوى، يعرض جدول «جميع الخوارزميات» أسفل النتيجة قيم MD5 وعائلة SHA للمدخلات نفسها.