ترميز/فك ترميز Base64
تحويل النص إلى ترميز Base64 والعكس
مشفر وفك تشفير Base64
المقدمة
Base64 هو نظام تشفير ثنائي إلى نص يمثل البيانات الثنائية في تنسيق سلسلة ASCII. تم تصميمه لنقل البيانات المخزنة في تنسيقات ثنائية عبر القنوات التي تدعم بشكل موثوق محتوى نصي فقط. يقوم تشفير Base64 بتحويل البيانات الثنائية إلى مجموعة من 64 حرفًا (ومن هنا جاء الاسم) يمكن نقلها بأمان عبر بروتوكولات النص دون تلف البيانات.
تتكون مجموعة أحرف Base64 من:
- الحروف الكبيرة A-Z (26 حرفًا)
- الحروف الصغيرة a-z (26 حرفًا)
- الأرقام 0-9 (10 أحرف)
- حرفين إضافيين، عادةً "+" و "/" (2 حرف)
تتيح لك هذه الأداة بسهولة تشفير النص إلى تنسيق Base64 أو فك تشفير سلاسل Base64 إلى نصها الأصلي. إنها مفيدة بشكل خاص للمطورين، والمهنيين في تكنولوجيا المعلومات، وأي شخص يعمل مع البيانات التي تحتاج إلى أن تُنقل بأمان عبر قنوات نصية.
كيفية عمل تشفير Base64
عملية التشفير
يعمل تشفير Base64 عن طريق تحويل كل مجموعة من ثلاثة بايت (24 بت) من البيانات الثنائية إلى أربعة أحرف Base64. تتبع العملية الخطوات التالية:
- تحويل النص المدخل إلى تمثيله الثنائي (باستخدام تشفير ASCII أو UTF-8)
- تجميع البيانات الثنائية في مجموعات من 24 بت (3 بايت)
- تقسيم كل مجموعة من 24 بت إلى أربع مجموعات من 6 بت
- تحويل كل مجموعة من 6 بت إلى حرف Base64 المقابل لها
عندما لا يكون طول المدخلات قابلاً للقسمة على 3، يتم إضافة حشو باستخدام "=" للحفاظ على نسبة 4:3 من أطوال المخرجات إلى المدخلات.
التمثيل الرياضي
بالنسبة لتسلسل البايتات ، يتم حساب أحرف Base64 المقابلة كما يلي:
حيث تمثل الحرف في أبجدية Base64.
عملية فك التشفير
يعكس فك تشفير Base64 عملية التشفير:
- تحويل كل حرف Base64 إلى قيمته المكونة من 6 بت
- دمج هذه القيم المكونة من 6 بت
- تجميع البتات في مجموعات من 8 بت (بايتات)
- تحويل كل بايت إلى حرفه المقابل
الحشو
عندما لا يكون عدد البايتات المراد تشفيرها قابلاً للقسمة على 3، يتم تطبيق الحشو:
- إذا كان هناك بايت واحد متبقي، يتم تحويله إلى حرفين من Base64 يتبعهما "=="
- إذا كان هناك بايتان متبقيان، يتم تحويلهما إلى ثلاثة أحرف من Base64 يتبعهما "="
مثال
دعنا نشفر النص "Hello" إلى Base64:
- التمثيل ASCII لـ "Hello": 72 101 108 108 111
- التمثيل الثنائي: 01001000 01100101 01101100 01101100 01101111
- التجميع في مجموعات من 6 بت: 010010 000110 010101 101100 011011 000110 1111
- تحتوي المجموعة الأخيرة على 4 بت فقط، لذا نقوم بإضافة حشو بالأصفار: 010010 000110 010101 101100 011011 000110 111100
- التحويل إلى القيم العشرية: 18، 6، 21، 44، 27، 6، 60
- البحث في أبجدية Base64: S، G، V، s، b، G، 8
- النتيجة هي "SGVsbG8="
لاحظ الحشو "=" في النهاية لأن طول المدخلات (5 بايت) غير قابل للقسمة على 3.
الصيغة
الصيغة العامة لحساب طول سلسلة مشفرة Base64 هي:
حيث تمثل دالة السقف (تقريب لأعلى إلى أقرب عدد صحيح).
حالات الاستخدام
يستخدم تشفير Base64 على نطاق واسع في تطبيقات مختلفة:
-
مرفقات البريد الإلكتروني: يستخدم MIME (امتدادات البريد الإلكتروني المتعددة الأغراض) Base64 لتشفير المرفقات الثنائية في البريد الإلكتروني.
-
عناوين البيانات: تضمين الصور الصغيرة، أو الخطوط، أو الموارد الأخرى مباشرة في HTML أو CSS أو JavaScript باستخدام مخطط عنوان
data:
. -
اتصالات API: نقل البيانات الثنائية بأمان في حمولات JSON أو تنسيقات API النصية الأخرى.
-
تخزين البيانات الثنائية في تنسيقات نصية: عندما تحتاج البيانات الثنائية إلى أن تُخزن في XML أو JSON أو غيرها من التنسيقات النصية.
-
أنظمة المصادقة: تستخدم المصادقة الأساسية في HTTP تشفير Base64 (على الرغم من أنه ليس للأمان، بل للتشفير فقط).
-
التشفير: كجزء من بروتوكولات وأنظمة تشفير مختلفة، غالبًا لتشفير المفاتيح أو الشهادات.
-
قيم الكوكيز: تشفير هياكل البيانات المعقدة لتخزينها في الكوكيز.
البدائل
بينما يُستخدم Base64 على نطاق واسع، هناك بدائل قد تكون أكثر ملاءمة في بعض الحالات:
-
Base64 الآمن للعنوان: نسخة تستخدم "-" و "_" بدلاً من "+" و "/" لتجنب مشكلات الترميز في العناوين. مفيد للبيانات التي سيتم تضمينها في العناوين.
-
Base32: يستخدم مجموعة من 32 حرفًا، مما يؤدي إلى مخرجات أطول ولكن مع قراءة أفضل للبشر وعدم حساسية للحالة.
-
ترميز Hex: تحويل بسيط إلى سداسي عشري، وهو أقل كفاءة (يضاعف الحجم) ولكنه بسيط جدًا ومدعوم على نطاق واسع.
-
نقل ثنائي: للملفات الكبيرة أو عندما تكون الكفاءة أمرًا حاسمًا، تكون بروتوكولات النقل الثنائي المباشر مثل HTTP مع رؤوس Content-Type المناسبة مفضلة.
-
ضغط + Base64: بالنسبة للبيانات النصية الكبيرة، يمكن أن يساعد الضغط قبل التشفير في التخفيف من الزيادة في الحجم.
-
تسلسل JSON/XML: للبيانات المهيكلة، قد يكون استخدام تسلسل JSON أو XML الأصلي أكثر ملاءمة من تشفير Base64.
التاريخ
تعود جذور تشفير Base64 إلى أنظمة الحوسبة والاتصالات المبكرة حيث كان يجب نقل البيانات الثنائية عبر قنوات مصممة للنص.
تم نشر المواصفة الرسمية لتشفير Base64 لأول مرة في عام 1987 كجزء من RFC 989، الذي حدد البريد الإلكتروني المحسن للخصوصية (PEM). تم تحديث ذلك لاحقًا في RFC 1421 (1993) وRFC 2045 (1996، كجزء من MIME).
يأتي مصطلح "Base64" من حقيقة أن التشفير يستخدم 64 حرفًا ASCII مختلفًا لتمثيل البيانات الثنائية. كان هذا الاختيار لـ 64 حرفًا مقصودًا، حيث أن 64 هو قوة من 2 (2^6)، مما يجعل التحويل بين الثنائية وBase64 فعالاً.
على مر الزمن، ظهرت عدة متغيرات من Base64:
- Base64 القياسي: كما هو محدد في RFC 4648، باستخدام A-Z، a-z، 0-9، +، / و = للحشو
- Base64 الآمن للعنوان: يستخدم - و _ بدلاً من + و / لتجنب مشكلات الترميز في العناوين
- Base64 الآمن للاسم: مشابه للآمن للعنوان، مصمم للاستخدام في أسماء الملفات
- Base64 المعدل لـ IMAP: يستخدم في بروتوكول IMAP مع مجموعة مختلفة من الأحرف الخاصة
على الرغم من مرور أكثر من ثلاثة عقود، لا يزال Base64 أداة أساسية في الحوسبة الحديثة، خاصة مع ظهور تطبيقات الويب وواجهات برمجة التطبيقات التي تعتمد بشكل كبير على تنسيقات البيانات النصية مثل JSON.
أمثلة على التعليمات البرمجية
إليك أمثلة على تشفير وفك تشفير Base64 في لغات برمجة مختلفة:
// تشفير/فك تشفير Base64 في JavaScript
function encodeToBase64(text) {
return btoa(text);
}
function decodeFromBase64(base64String) {
try {
return atob(base64String);
} catch (e) {
throw new Error("سلسلة Base64 غير صالحة");
}
}
// مثال على الاستخدام
const originalText = "Hello, World!";
const encoded = encodeToBase64(originalText);
console.log("المشفر:", encoded); // SGVsbG8sIFdvcmxkIQ==
try {
const decoded = decodeFromBase64(encoded);
console.log("المفكك:", decoded); // Hello, World!
} catch (error) {
console.error(error.message);
}
حالات حافة واعتبارات
عند العمل مع تشفير وفك تشفير Base64، كن على دراية بهذه الاعتبارات المهمة:
-
Unicode والأحرف غير ASCII: عند تشفير النص الذي يحتوي على أحرف غير ASCII، تأكد من استخدام الترميز الصحيح (عادةً UTF-8) قبل تشفير Base64.
-
الحشو: يستخدم Base64 القياسي الحشو باستخدام أحرف "=" لضمان أن يكون طول المخرجات مضاعفًا لـ 4. تسمح بعض التطبيقات بتجاهل الحشو، مما قد يسبب مشكلات في التوافق.
-
فواصل الأسطر: تقوم تطبيقات Base64 التقليدية بإدراج فواصل أسطر (عادةً كل 76 حرفًا) للقراءة، ولكن التطبيقات الحديثة غالبًا ما تتجاهل ذلك.
-
Base64 الآمن للعنوان: تستخدم Base64 القياسية أحرف "+" و"/" التي لها معاني خاصة في عناوين URL. للسياقات المتعلقة بالعناوين، استخدم Base64 الآمن للعنوان الذي يستبدل هذه الأحرف بـ "-" و"_".
-
المسافات البيضاء: عند فك التشفير، تكون بعض التطبيقات مرنة وتتجاهل المسافات البيضاء، بينما تتطلب أخرى إدخالًا دقيقًا.
-
زيادة الحجم: يزيد تشفير Base64 من حجم البيانات بحوالي 33% (4 بايتات مخرجة لكل 3 بايتات مدخلة).
-
الأداء: يمكن أن يكون تشفير وفك تشفير Base64 مكثفًا من الناحية الحسابية للبيانات الكبيرة جدًا. ضع في اعتبارك استخدام الأساليب المتدفقة للملفات الكبيرة.