أدوات المطورين · SHA حاسبة التجزئة
Hex وBase64 وRaw Bytes: ثلاث طرق لكتابة نفس SHA الملخص
· كيف يعمل
شا-256 base64 ترميز تنسيقات الملفات
يطبع sha256sum شكلًا سداسيًا، ويخزن package-lock.json قاعدة 64 ويستخدم Docker بادئة sha256:. ويمكن أن تكون جميعها متماثلة 32 bytes. يشرح هذا المنشور كل تمثيل وكيفية التحويل بينهما.
التجزئة التي تبدو مختلفة ولكنها متطابقة - سلسلة ملف قفل ومجموع اختباري طرفي لنفس الملف
الملخص SHA-256 هو في الأساس 32 bytes. إن كيفية كتابة تلك البايتات تحدد شكل الملخص. يظهر ملخص واحد، 32 بايت متطابقة، على هيئة 64 أحرف سداسية عشرية (اثنان لكل بايت)، أو 44 أحرف أساسية 64 (حوالي أربعة لكل ثلاثة بايت)، أو أطوال وتنسيقات مختلفة اعتمادًا على التشفير. ينشأ الالتباس لأن ملف القفل قد يُظهر تمثيلاً واحدًا بينما تعرض الوحدة الطرفية تمثيلًا آخر، وكلاهما لنفس 32 bytes الأساسي.
إن فهم الترميز هو الخطوة التي تدور حول "لماذا تبدو هذه الأشياء مختلفة؟" إلى "أستطيع أن أؤكد أنهما متماثلان." جميع التمثيلات الثلاثة متكافئة بمجرد فك تشفيرها مرة أخرى إلى وحدات البايت.
الملخص عبارة عن بايتات - 20، 32، 48 أو 64 منها اعتمادًا على الخوارزمية، قبل أي تشفير للنص
قبل وجود أي تمثيل نصي، تكون النتيجة عبارة عن ArrayBuffer من وحدات البايت الملخصة. ToolAcre يغلف هذا المخزن المؤقت باستخدام Uint8Array، ثم يكتب كل بايت كرقمين سداسي عشري أو يحول كل بايت إلى حرف ثنائي قبل استدعاء btoa. لا يقوم أي من المنسقين بإعادة تشغيل التجزئة، ولا يغير أي منهما بت ملخص واحد.
يتبع عرض البايت الخوارزمية المحددة في هذه الأداة: SHA-1 يُرجع عشرين بايت، SHA-256 اثنان وثلاثون، SHA-384 ثمانية وأربعون وSHA-512 أربعة وستون. هذه هي المخرجات المدعومة التي تم التحقق منها من خلال البيانات الوصفية والاختبارات الخوارزمية. البايتات الأولية مناسبة للمقارنة البرمجية؛ Hex وbase64 عبارة عن تدوينات نقل للقنوات التي تتوقع النص.
Hex - حرفان لكل بايت، ولماذا يهيمن على أدوات سطر الأوامر، وسؤال الحالة
يستخدم التمثيل السداسي العشري الأرقام 0-9 والأحرف A-F (أو a-f) لتمثيل 16 القيم المحتملة لـ 4 بت. رقمان سداسي عشريان يمثلان بايتًا واحدًا. ملخص SHA-256 للإدخال abc هو 32 bytes، لذلك يتم عرضه على هيئة 64 أحرف سداسية عشرية: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. هذا هو التنسيق الذي تطبعه معظم أدوات سطر الأوامر. النظام الست عشري يمكن قراءته بواسطة الإنسان ولا لبس فيه؛ يتم تمثيل كل بايت بنفس الحرفين تمامًا في كل مرة.
الست عشري هو التنسيق الافتراضي للمجموعات الاختبارية والتجزئة في الوثائق وفي سطر الأوامر. من السهل القراءة والنسخ، ولا يوجد أي حشوة، أو حساسية لحالة الأحرف في التفسير (على الرغم من أن العرف يفرض أحرفًا صغيرة أو كبيرة باستمرار)، ولا توجد أحرف خاصة تحتاج إلى الهروب في عناوين URL أو JSON. الجانب السلبي هو أنه يأخذ ضعف عدد الأحرف مثل البايتات الأولية، وهذا هو سبب وجود تنسيقات أخرى.
Base64 وbase64url - ما يقرب من أربعة أحرف لكل ثلاثة بايت، والمساحة، ومكان ظهور كل منها (SRI، npm، SSH بصمات الأصابع)
يقوم Base64 بترميز ثلاث بايتات كأربعة أحرف مستمدة من أبجدية مكونة من 64: A-Z، a-z، 0-9، +، /. البايتات الثلاثة 61 62 63 ( رموز ASCII لـ abc) يتم ترميزها كـ YWJj في base64. يتم ترميز الملخص الكامل 32 بايت SHA-256 بحوالي 44 حرف أساسي يبلغ 64 حرفًا. يؤدي الحشو باستخدام = الأحرف إلى رفع طول الإخراج إلى مضاعفات 4، لذا فإن 44 حرفًا بالإضافة إلى 0 الحشو (لأن 32 هو مضاعف 3، ليست هناك حاجة إلى الحشو). يؤدي فك التشفير إلى عكس العملية: يتم فك تشفير أربعة أحرف Base64 إلى ثلاث بايت.
يظهر Base64 في ملفات package-lock.json، وnpm sparknwrap، وSRI (تكامل المصدر الفرعي) في HTML، وSSH بصمات الأصابع الرئيسية. إنه مضغوط - أطول بنسبة 33% تقريبًا من البايتات الأولية، مقارنةً بالبايت السداسي العشري الأطول بنسبة 100%. والمقايضة هي أنه ليست كل تمثيلات النص سهلة القراءة بنفس القدر؛ يبدو base64 أكثر تعقيدًا للعين البشرية من الشكل السداسي.
النماذج السابقة — sha256: في ملخصات الحاوية، sha384- في سمات التكامل، SHA256: في SSH
Base64url هو متغير تم تعريفه في RFC 4648 الذي يستبدل - و _ لـ + و /. تصبح الأبجدية A-Z، a-z، 0-9، -، _. تستخدم JWTs base64url لأن + و / لها معاني خاصة في عناوين URL (+ يمكن قراءتها كمسافة في سلاسل الاستعلام، / هو فاصل المسار). دائمًا ما يكون المقطع JWT مشفرًا بـ base64url، وسيرفضه جهاز فك الترميز الذي يصر على base64 القياسي. على العكس من ذلك، فإن وحدة فك ترميز base64url التي لا تقبل الأبجدية القياسية ستفشل في base64 القياسي.
الحشو اختياري في base64url. منصات base64 القياسية مع = للتأكد من أن طول الإخراج هو مضاعف 4. عادةً ما يحذف Base64url الحشو لأن = بحد ذاته URL-محرج. يجب أن يقبل جهاز فك التشفير base64url مع الحشو أو بدونه، ويجب أن يكون جهاز التشفير واضحًا بشأن ما ينتجه. تقبل أداة ToolAcre base64 كلاً من الحروف الهجائية وتتحمل الحشو المفقود عند الإدخال، وتتيح لك اختيار التنسيق عند الإخراج.
مثال عملي - تم تحويل ملخص واحد من hex إلى base64 والعكس، مع تحديد حدود البايت
تضيف النماذج البادئة معرف المخطط إلى الملخص. تستخدم ملخصات صور Docker sha256:ba7816bf...، حيث تكون sha256: هي البادئة. SSH تستخدم بصمات الأصابع SHA256:، بنقطتين. تستخدم بعض الأدوات sha256= أو SHA256= (مع علامة يساوي). البادئة إعلامية بحتة؛ يخبرك بالخوارزمية التي أنتجت الملخص. تؤدي إزالة البادئة إلى ترك نفس البايتات بنفس التشفير.
عند مقارنة الملخصات، البادئة هي الضوضاء. إذا قامت إحدى الأدوات بطباعة SHA256:ba78... وقامت أداة أخرى بطباعة ba78...، فإنهما نفس الملخص؛ البادئة هي مجرد بيانات وصفية حول التنسيق. وبالمثل، فإن البادئات مثل sha256:- (المستخدمة في بعض سياقات الحاويات) أو sha384- (المستخدمة في سمات التكامل) هي اصطلاحات تنسيق لا تغير البايتات. تجريدهم للمقارنة.
ما لا يغطيه هذا - ما هو التشفير الذي تنبعث منه أداة معينة؛ تحقق من تنسيق الإخراج قبل المقارنة
ملخص واحد، SHA-256 للمدخل abc، يظهر في أشكال متعددة: hex (64 أحرف)، base64 مع الحشو (44 أحرف)، base64url مع الحشو (44 أحرف، مع - و _ بدلاً من + و /), أو مع بادئات مختلفة. للتأكد من أنها متماثلة، قم بفك تشفير كل منها العودة إلى البايتات ومقارنة البايتات. يتم فك التشفير إلى البايتات ba7816bf... 0xba 0x78 0x16 0xbf 0x8f 0x01 0xcf 0xea... يتحول تمثيل base64 إلى نفس تسلسل البايت عند فك التشفير.
تقوم حاسبة التجزئة ToolAcre SHA بالإخراج بالنظام الست عشري بشكل افتراضي. إذا كنت بحاجة إلى base64، فيمكنك استخدام أداة منفصلة لتحويل الشكل السداسي إلى base64، أو استخدام الأداة المساعدة base64 على نفس الموقع لتشفير النص مباشرةً. يتم إخراج الأدوات المصممة لسياقات محددة (npm لـ package-lock.json، وDocker لملخصات الصور) بالتنسيق الذي يتوقعه سياقها. إن فهم أن هذه العناصر كلها متشابهة 32 bytes في ملابس مختلفة يزيل الارتباك عندما تختلف الأدوات حول التنسيق.
الوجبات الجاهزة: قارن البايتات، وليس السلاسل - احسب الملخص باستخدام حاسبة التجزئة ToolAcre SHA، ثم قم بالتحويل إلى التمثيل الذي تتحقق منه
لتحويل ملخص سداسي عشري يدويًا إلى base64، قم بتجميع الأرقام السداسية في بايت، ثم قم بتحويل كل بايت إلى رقم عشري، ثم قم بالتشفير باستخدام أبجدية base64. البايت 0xba (hex ba) هو رقم عشري 186؛ 0x78 هو 120؛ 0x16 هو 22؛ 0xbf هو 191. تجميع هذه البايتات الأربع وترميزها كـ base64 يعطي الأحرف w (0 + 22 في الأبجدية)، كـ (ترميز 186)، AA (ترميز 120)، vw (ترميز 191). يتطلب الملخص الكامل القيام بذلك 10 مرات والحشو إذا لزم الأمر. هذه العملية اليدوية مفيدة ولكنها مملة؛ أداة تحويل base64 تجعلها فورية.
الفكرة الأساسية هي أن الملخص يتكون من البايتات أولاً، وتمثيل النص ثانوي. يتم فك تشفير كل تشفير لنفس البايتات مرة أخرى إلى نفس البايتات، وبالتالي يكون قابلاً للتبديل لأغراض التحقق من السلامة. إن اختلافات حالة الأحرف في الشكل السداسي، واختلافات الحشو في base64، والبادئات، والتباعد كلها خيارات تنسيق لا تؤثر على القيمة الفعلية. عندما تتقن القدرة على التحويل بين التمثيلات، تصبح حالات عدم تطابق تنسيق الملخص مشكلات تصحيح أخطاء يمكنك حلها بدلاً من الألغاز.