أدوات المطور · التشفير ووحدة فك التشفير Base64
Base64 vs hex vs base32: مقارنة ثلاث طرق لكتابة البايتات كنص
· خلفية
base64 ترميز
تحل Hex وbase32 وBase64 نفس المشكلة مع مقايضات مختلفة من حيث الحجم وسهولة القراءة والسلامة. يقارنها هذا المنشور من حيث الكثافة وحساسية الحالة وURL والسلامة والخطأ البشري.
المفتاح API الذي تمت كتابته بشكل خاطئ بسبب l، 1، I وO - فشل ملموس في قابلية القراءة لم يكن من الممكن أن يحدثه النظام السداسي عشري
ثلاث طرق شائعة لتمثيل البايتات كنص هي Hex وbase32 وbase64. إنهم جميعًا يحلون نفس المشكلة (التعبير عن البايتات العشوائية في ASCII القابلة للطباعة) ولكن مع مقايضات مختلفة في الحجم وسهولة القراءة ومرونة الأخطاء. الشكل السداسي هو 2 حرف لكل بايت (F3 A2 B1 ...)، لذا فإن 16 bytes يصبح 32 حرفًا. Base32 هو 1.6 حرف لكل بايت (حوالي 5 حرف لكل 3 bytes)، لذا فإن 16 bytes يصبح 26 حرفًا.
Base64 هو 1.33 حرف لكل بايت (بالضبط 4 حرف لكل 3 bytes)، لذا فإن 16 bytes يصبح 24 حرفًا أو أقل. إذا كان حجم الملف مهمًا، فإن Base64 هو الأكثر ضغطًا. إذا كان النسخ البشري مهمًا، فإن hex وbase32 أكثر أمانًا. يعد اختلاف قابلية القراءة أمرًا بالغ الأهمية عند كتابة القيمة أو نسخها أو نطقها. يستخدم Hex 0-9 وa-f (غير حساس لحالة الأحرف في معظم السياقات). تغير قناة النسخ القرار لأن التمثيل المحسن للأجهزة قد يكون محرجًا للأشخاص. Base64 حساس لحالة الأحرف ويستخدم رمزي علامات الترقيم؛ يستخدم Hex مفردات بصرية أصغر. التنفيذ هنا يختبر السلاسل الدقيقة، وليس معدل الخطأ البشري، لذلك لا يتم إرفاق أي احتمال مخترع.
الكثافة: 2×، 1.6× و 1.33× - عدد الأحرف التي يحتاجها كل ترميز لكل بايت ولماذا
يستخدم Base32 A-Z و2-7، متجنبًا 0، 1، O وI التي يمكن الخلط بينها بسهولة على الورق. يستخدم Base64 A-Z وa-z و0-9 و+ و/, بما في ذلك الأحرف الكبيرة والصغيرة، مما يجعله حساسًا لحالة الأحرف وخلط الأرقام التي تبدو متشابهة (0 مقابل O، 1 مقابل I مقابل الأحرف الصغيرة l). قد يكون المفتاح API في الشكل السداسي f3a2b1e4؛ قد تكون نفس البايتات في base64 86KrvE== (مع الحشو)، أو في base32 6VEV7FI= (مع الحشو).
إذا كان يجب على المستخدم كتابة القيمة يدويًا، فإن hex أو base32 أكثر أمانًا من base64. الأحرف المحجوزة في عناوين URL مهمة. Hex وbase32 آمنان لعناوين URL؛ كلاهما يستخدم الأحرف الأبجدية الرقمية فقط (يستخدم السداسي أيضًا 0-9، ويستخدم base32 أيضًا 2-7). يستخدم Base64 علامة الجمع والشرطة المائلة المحجوزة URL (تمثل علامة الزائد مسافة في البيانات المشفرة بالنموذج، والشرطة المائلة هي فاصل المسار). تتبع كثافة Base64 مباشرة من ستة بتات مفيدة لكل رمز إخراج وحشوة إلى كتل مكونة من أربعة أحرف. يحمل Hex أربع بتات لكل رمز، مما يجعل حرفين لكل بايت. تتم مناقشة Base32 كسياق مقارنة فقط لأن هذا المستودع لا يوفر أبجديته ولا برنامج تشفير للتحقق من المخرجات.
الكثافة من عرض البت - Base64 الدقيق والحساب السداسي، مع معاملة Base32 كسياق مقارنة
يجب أن تكون سلسلة base64 في المعلمة URL مشفرة بنسبة مئوية (تصبح علامة الزائد %2B، وتصبح الشرطة المائلة %2F)، مع إضافة 4 أحرف إضافية لكل تكرار. يستبدل Base64url (RFC 4648 القسم 5) علامة الجمع بشرطة وشرطة مائلة بشرطة سفلية، مما يجعلها URL آمنة بدون تشفير النسبة المئوية. معظم واجهات برمجة التطبيقات التي تستخدم base64 في عناوين URL تستخدم فعليًا base64url، لكن التمييز غالبًا ما لا يكون واضحًا في الوثائق.
عادةً ما يتم توزيع أسرار TOTP (الرموز التي تستخدمها تطبيقات المصادقة) على أنها base32. تعرض شاشة التسجيل TOTP سر Base32 لأنه من الأسهل الكتابة والنسخ من نفس البايتات في base64 أو hex. غالبًا ما يتم عرض ملخصات التجزئة SHA بالشكل السداسي لأنه التنسيق التقليدي ولأن السداسي عشري غير حساس لحالة الأحرف، مما يجعل الأخطاء المطبعية أقل احتمالاً. تعتبر حساسية حالة الأحرف مهمة عندما يقرأ شخص ما قيمة بصوت عالٍ أو يعيد كتابتها، نظرًا لأن تغيير حالة حرف واحد يؤدي إلى تغيير فهرسه. ToolAcre يحافظ على حالة الأحرف تمامًا وسيقوم بفك تشفير وحدات البايت المختلفة الناتجة دون معرفة أن الإنسان قد ارتكب خطأً في النسخ. التمثيل نفسه ليس لديه المجموع الاختباري.
الأحرف المحجوزة والأمان URL - حيث + و/bite، وكيف يتجنب base32 وhex المشكلة
تستخدم JWTs base64url. قد يكون المجموع الاختباري للملف سداسي عشري أو base64؛ كلاهما شائع. والخيار هنا هو تقليد تاريخي، وليس ضرورة فنية. تعد مرونة الخطأ فرقًا دقيقًا ولكنه مهم. يتجنب Base32 الأرقام 0، 1، 8، و9 (التي تبدو كأحرف)، مما يقلل من أخطاء النسخ. يتضمن Base64 جميع الأرقام، مما يجعل 1 غامضًا (هل هو حرف I أم حرف صغير l أم الرقم 1؟).
النظام العشري أكثر عرضة للخطأ: 0 يبدو مثل O، l يبدو مثل 1. يعد المجموع الاختباري الذي يجب كتابته أو قراءته من النسخة المطبوعة أكثر أمانًا في base32. يعتبر المفتاح API الذي يتم لصقه مباشرة من جهاز الكمبيوتر آمنًا بأي تنسيق؛ سهولة القراءة مهمة فقط عندما يتعلق الأمر بالعين البشرية. البايتات هي نفسها، لكن التشفير مختلف: تسلسل البايت 16 [0xf3، 0xa2، 0xb1، ...] يصبح f3a2b1... تحتاج علامة الزائد والشرطة المائلة القياسية في Base64 إلى معالجة مدركة للقناة؛ URL- يستبدل الوضع الآمن هذه الواصلات والشرطة السفلية. يتجنب Hex تلك الفواصل باستخدام الأرقام والحروف وحدها. تختلف اتفاقيات Base32، لذا تتجنب هذه المقالة خصائص الأمان الواعدة التي لا ينفذها المستودع أو يختبرها.
مثال عملي: نفس 16 bytes في جميع الترميزات الثلاثة - مقارنة الأطوال والفحص البصري
بالشكل الست عشري، 6VEV7FI=... في base32، و86KrvE== في base64. لا شيء من هذه السلاسل قابلة للتبديل. التطبيق الذي يتلقى f3a2b1... يتوقع سداسيًا عشريًا وسيحاول تحليله على أنه سداسي عشري. سيفشل استلام 86KrvE== إذا كان التطبيق يتوقع ست عشريًا. يعد تنسيق التشفير جزءًا من عقد البيانات: يجب أن يتفق المرسل والمتلقي على نوع التشفير المستخدم. الحشو هو فرق آخر.
لا يستخدم الشكل السداسي الحشو (4 bytes دائمًا 8 أحرف سداسية عشرية، بدون استثناءات). يستخدم كل من Base32 وbase64 مساحة متساوية لمحاذاة الإخراج مع عدة أحرف (8 لـ base32، 4 لـ base64). الحشو ضروري رياضيا. فهو يضمن أن كل إدخال n بايت ينتج عنه عدد أحرف محدد. تختلف قواعد الحشو: تتطلب بعض التطبيقات الحشو، والبعض الآخر يسمح بحذفه. تستخدم المقارنة العملية تسلسل بايت ثابت وتحسب Base64 وhex ميكانيكيًا. يمكن مناقشة طول Base32 الخاص به من خلال تجميع مكون من خمسة بتات، ولكن تم حذف قيمة نص Base32 الدقيقة لأنه لم يتم إنشاء أي تطبيق تمت مراجعته. يتم الاحتفاظ بحساب الطول والتحقق من الإخراج بشكل منفصل.
حيث يكون كل منها تقليديًا - التجزئة في شكل سداسي عشري، TOTP الأسرار في base32، وJWTs والبيانات: معرفات URI في Base64
عند لصق قيمة base32 أو base64 بدون حشوة، قد تقبلها أجهزة فك التشفير أو ترفضها اعتمادًا على التنفيذ. تُظهر مفاتيح التشفير والرموز المميزة اختلاف التشفير.
المفتاح HMAC هو 32 bytes، والذي يصبح 64 حرفًا سداسيًا عشريًا، أو 52 حرفًا أساسيًا 32 (مع الحشو)، أو 44 حرفًا أساسيًا 64 (مع الحشو). عند توزيع المفتاح، يجب توثيق الترميز. إذا كانت الوثائق تشير إلى أن المفتاح هو 44 حرف أساسي 64 ولكنك تتلقى 52 حرفًا، فهذا يعني أن هناك خطأ ما. يمكن للاتفاقية أن ترشد القراء ولكنها لا تثبت ملاءمتها. يتم عرض ملخصات التجزئة بشكل شائع في شكل سداسي عشري، بينما تستخدم مقاطع JWT Base64url. لا يزال الاختيار الصحيح يعتمد على قواعد القناة، وما إذا كان الأشخاص ينسخون القيمة، وما إذا كان بروتوكول آخر قد قام بالفعل بإصلاح التمثيل.
ما لا يغطيه هذا هو الترميزات base58 وbase85 والمجموع الاختباري
يعمل ترميز Base64 الأقصر على تسهيل ملاءمة الرموز المميزة في الأنظمة ذات عدد الأحرف المسموح به (مثل رموز QR أو عناوين URL). يتم تحديد اختيار التشفير للقيمة من خلال أي نظام بيئي جاءت منه. غالبًا ما تستخدم واجهات برمجة تطبيقات الويب base64url. غالبًا ما تستخدم وثائق التشفير عرافة. تستخدم تطبيقات المصادقة base32. عند إنشاء نظام، اختر تشفيرًا واحدًا، وقم بتوثيقه بوضوح، والتزم به.
يؤدي خلط الترميزات (مثل base64 أو base32) إلى حدوث ارتباك. عند تصحيح الأخطاء، تتمثل الخطوة الأولى في تحديد التشفير الذي تستخدمه القيمة؛ يمكن لأداة التشفير وفك التشفير Base64 المساعدة من خلال محاولة فك تشفيرها بطرق متعددة ومعرفة أي منها ينتج مخرجات معقولة. لا يوجد ترميز أفضل عالميًا. Base64 هو الأكثر إحكاما للتخزين الخام. Hex هو الأكثر شيوعًا لدى مصممي التشفير والأكثر قابلية للقراءة من قبل الإنسان للتسلسلات الصغيرة. تقوم الترميزات Base58 وBase85 والمجموع الاختباري بإجراء مقايضات مختلفة وهي غائبة عن لوحة Base64 الخاصة بـ ToolAcre. وينبغي تقييم أبجدياتها وقواعد الغموض والمجاميع الاختبارية باستخدام مصادر وتطبيقات مخصصة بدلاً من استقراءها من سلوك هذه الأداة الذي تم اختباره.
الوجبات الجاهزة: اختر التشفير للقناة والقارئ - كيف يغطي برنامج التشفير ووحدة فك التشفير Base64 حالة Base64 في المتصفح، جنبًا إلى جنب مع حاسبة التجزئة SHA في نفس المنتج
Base32 هو الأكثر مرونة لأخطاء النسخ. ويعتمد الاختيار على السياق: أين تعيش القيمة، وكيف يتم تقاسمها، وما هي الأنظمة التي ستستهلكها.
يساعدك فهم المقايضات على الاختيار بحكمة عند تصميم API أو نظام ما. توضح أداة التشفير وفك التشفير Base64 ترميز Base64؛ يتيح لك استخدامه جنبًا إلى جنب مع الأداة السداسية أو base32 رؤية نفس البايتات في جميع التنسيقات الثلاثة وفهم اختلافات حجمها وسهولة قراءتها. بالنسبة لحالة Base64، قم بتشفير نموذج، ولاحظ العدد الدقيق UTF-8 للبايت وأحرف الإخراج، ومعيار الاختبار مقابل علامات الترقيم الآمنة URL. للحصول على ملخص العمل، استخدم لوحة SHA المنفصلة. يؤدي الحفاظ على تمييز هذه العمليات إلى منع الخلط بين خيار التشفير والتجزئة أو حماية السلامة.