Anonymous View

Base64 مفكّك التشفير

/

بياناتك خاصة 100% -- يتم تشفير وفك تشفير Base64 بالكامل على جهازك مباشرة.

نص عادي
Base64

ما هو Base64؟#

Base64 هو طريقة لتمثيل البيانات الثنائية كنص عادي باستخدام 64 حرفًا من ASCII: A–Z وa–z و0–9 إضافةً إلى + و/. يتيح نقل البيانات الثنائية كالصور والمفاتيح ومرفقات البريد الإلكتروني بأمان عبر الأنظمة المبنية للنصوص. وهو ترميز وليس تشفيرًا.

يستخدم Base64 أبجديةً ثابتةً من 64 حرفًا. كل قيمة من 0 إلى 63 تُعيَّن إلى حرف واحد بالضبط، وهذا ما يجعل كل 3 بايتات من البيانات الثنائية تتحول إلى 4 أحرف قابلة للقراءة:

القيمالأحرف
0–25A–Z26 حرفًا كبيرًا
26–51a–z26 حرفًا صغيرًا
52–610–910 أرقام
62–63+ /رمزان

الاستثناء الوحيد هو علامة "=". إنها حشو وليست إحدى القيم الـ 64، وتُستخدم فقط لإكمال الكتلة الأخيرة.

لقد صادفته على الأرجح من قبل. يظهر Base64 في كل مكان تحتاج فيه البيانات الثنائية إلى النقل داخل نص:

  • تضمين صورة صغيرة أو أيقونة مباشرةً في HTML أو CSS
  • إعادة الكائنات الثنائية الكبيرة داخل استجابة JSON API
  • ترميز مرفقات البريد الإلكتروني (MIME)
  • تخزين المفاتيح والشهادات في ملفات PEM

تبدو خدعة data-URI كالتالي. السلسلة الطويلة هي الصورة بأكملها:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

لماذا يوجد Base64؟#

بُنيت بروتوكولات الشبكات المبكرة للنصوص وليس للبايتات الخام. استخدم ASCII 7 بتات و128 حرفًا، وهو ما كان مناسبًا للغة الإنجليزية لكنه لم يكن كافيًا للبيانات الثنائية. كانت بعض الأنظمة تشوّه أحرف التحكم أو تعيد كتابة نهايات الأسطر (LF إلى CR + LF)، مما يُفسد الصور والصوت أثناء النقل بصمت.

يتجاوز Base64 كل ذلك بإصداره أحرفًا تتوافق عليها جميع الأنظمة دائمًا. يؤدي Base16 وBase32 المهمة ذاتها بأبجديات أصغر، لكن Base64 يحزم بيانات أكثر لكل حرف مع الحفاظ على الأمان. لهذا السبب انتشر.

كيف يعمل ترميز Base64#

يقوم المخطط بأكمله على فكرة واحدة تتكرر: خذ 3 بايتات (24 بتًا)، وأعد تقسيمها إلى أربع مجموعات من 6 بتات، وابحث عن كل مجموعة في الأبجدية. إليك كلمة "Logto" مرمَّزة يدويًا.

  1. اكتب كل حرف بتمثيله الثنائي المؤلف من 8 بتات باستخدام رمز ASCII الخاص به.
  2. خذ 3 بايتات في كل مرة. هذا يساوي 24 بتًا.
  3. أعد تقسيم نفس الـ 24 بتًا إلى أربع مجموعات من 6 بتات.
  4. اقرأ كل مجموعة من 6 بتات كرقم من 0 إلى 63.
  5. ابحث عن هذا الرقم في الأبجدية للحصول على حرف واحد.
  6. إذا لم تصل الكتلة الأخيرة من البايتات إلى 3، أكمل البتات المتبقية بأصفار وأضف "=" لكي تبقى كل كتلة 4 أحرف.

الخطوة 1. حوّل كل حرف إلى تمثيله الثنائي المؤلف من 8 بتات:

الحرفرمز ASCIIالثنائي
L7601001100
o11101101111
g10301100111
t11601110100
o11101101111

الخطوة 2. خذ البايتات الثلاثة الأولى "Log"، وأعد تقسيم نفس الـ 24 بتًا إلى أربع مجموعات من 6 بتات:

بايتات 8 بتات
01001100 01101111 01100111
مجموعات 6 بتات
010011 000110 111101 100111

الخطوة 3. اقرأ كل مجموعة من 6 بتات كرقم، ثم ابحث عن الرقم في الأبجدية:

مجموعة 6 بتاتالقيمةحرف Base64
01001119T
0001106G
111101619
10011139n

"Logto" مؤلفة من 5 بايتات وليست مضاعفًا للعدد 3. البايتان الأخيرتان "to" تتركان تقسيمًا 6 + 6 + 4. أكمل تلك الـ 4 بتات الأخيرة بأصفار لملء مجموعة من 6 بتات، ثم أضف "=" لاستكمال الكتلة المؤلفة من 4 أحرف:

اجمع الكتل معًا:

"Logto"  →  TG9ndG8=

كل لغة برمجة تأتي بهذا مدمجًا. في Node.js:

const text = 'Logto';
const base64 = Buffer.from(text).toString('base64');
console.log(base64); // TG9ndG8=

ثلاث قواعد تنبثق من هذه العملية، تجدر الإشارة إليها:

  • 3 دخلًا، 4 خرجًا: طول الخرج هو المدخل مقرَّبًا للأعلى إلى مضاعف 4 أحرف، لذا تكون البيانات المرمَّزة دائمًا أكبر بحوالي 33%.
  • "=" تعني الحشو: لا تظهر إلا عندما لا يكون المدخل مضاعفًا للعدد 3 بايتات.
  • الحشو يحصي الزيادات: لا "=" يعني مضاعفًا للعدد 3 بايتات، وواحدة "=" تعني 2 بايت زيادة، واثنتا "=" تعنيان 1 بايت زيادة.

متى يجب عليك استخدام Base64؟#

استخدم Base64 عندما تحتاج البيانات الثنائية إلى المرور عبر قناة نصية فقط:

  • الأصول المضمَّنة: ادمج صورة صغيرة أو خطًا في HTML/CSS لتوفير طلب شبكة.
  • وسائل النقل النصية فقط: ضع البيانات الثنائية داخل JSON أو XML أو معامل استعلام URL.
  • الأحرف المقيَّدة: انقل البيانات عبر الأنظمة التي تتعطل عند بايتات التحكم.

ما ستحصل عليه في المقابل:

  • يعمل في كل مكان: يمكن لأي نظام يدعم ASCII قراءته دون الحاجة إلى التفاوض على مجموعة الأحرف.
  • لا شيء يتلف: يصمد الخرج في القنوات التي قد تُتلف البايتات الخام.

Base64 الآمن للروابط (Base64URL)#

يعتمد Base64 القياسي على ثلاثة أحرف تتعارض مع آلية عمل روابط URL وسلاسل الاستعلام وأسماء الملفات: + و/ و= للحشو. ضع سلسلة Base64 عادية في رابط وقد تتعطل بطرق غير محسوسة:

  • + تتحول إلى مسافة. في سلسلة استعلام، تقرأ خوادم كثيرة + كمسافة. لذا يصل ?data=ab+cd بصمت كـ "ab cd"، وتكون البايتات خاطئة.
  • / هو فاصل مسار. قد تُقرأ / داخل قيمة كجزء مسار جديد، وترفضها معظم أنظمة الملفات في اسم الملف كليًا.
  • = محجوزة أيضًا. تفصل المفاتيح عن القيم في سلسلة الاستعلام، لذا يُحذف حشو = الزائد أو يُقرأ بشكل خاطئ.

يمكنك ترميزها بالنسبة المئوية (+ تصبح %2B، و/ تصبح %2F، و= تصبح %3D)، لكن ذلك يُضخّم السلسلة ويسهل الوقوع في خطأ الترميز المزدوج.

يحل Base64URL (RFC 4648 §5) هذا من المصدر: استبدل + بـ - واستبدل / بـ _ واحذف حشو =. النتيجة تندرج مباشرةً في URL أو معامل استعلام أو اسم ملف دون الحاجة إلى أي ترميز. ستجده في روابط URL وأسماء الملفات والعديد من واجهات برمجة التطبيقات على الويب.

const base64 = 'TG9ndG8=';
const urlSafe = base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
console.log(urlSafe); // TG9ndG8

القيود (وسوء فهم كبير واحد)#

Base64 هو تمثيل وليس حلًا سحريًا. ضع ثلاثة أمور في الاعتبار:

  • أكبر بحوالي 33%: تتحول 3 بايتات إلى 4 أحرف، لذا تتضخم البيانات المرمَّزة بمقدار الثلث تقريبًا.
  • يكلف موارد المعالج: الترميز وفك الترميز ليسا مجانيَّين عند الحجم الكبير أو الحمولات الضخمة.
  • يصعب قراءته: السلاسل الغامضة تجعل السجلات وعملية التصحيح أصعب.
Base64 ليس تشفيرًا. هذا هو الخطأ الذي يرتكبه الناس أكثر من غيره. Base64 لا يخفي شيئًا. يمكن لأي شخص فك ترميزه في سطر واحد. إذا كانت البيانات حساسة، فقم بتشفيرها. Base64 يغيّر الشكل فقط، ولا يغيّر أبدًا من يمكنه قراءتها.

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

هل Base64 تشفير أم آمن؟

لا. إنه ترميز قابل للعكس بأبجدية عامة، لذا يمكن لأي شخص فك ترميزه فورًا ولا يُضيف أي سرية. قم بتشفير البيانات الحساسة عوضًا عن ذلك.

لماذا سلسلة Base64 أكبر بحوالي 33%؟

يحوّل Base64 كل 3 بايتات إلى 4 أحرف، لذا يكون الشكل المرمَّز دائمًا أكبر بحوالي ثلث حجم البايتات الأصلية.

ماذا تعني علامات "=" في النهاية؟

إنها حشو يجعل الخرج مضاعفًا للعدد 4 أحرف. "=" واحدة تعني أن المدخل كان يحتوي على 2 بايت زيادة؛ "==" تعني أنه كان يحتوي على 1؛ وعدم وجود "=" يعني أن الطول كان بالفعل مضاعفًا للعدد 3 بايتات.

ما الفرق بين Base64 وBase64URL؟

Base64URL هو نفس الترميز بأبجدية آمنة لروابط URL وأسماء الملفات: - و_ يحلان محل + و/، ويُحذف حشو = عادةً. وهو شائع في روابط URL وأسماء الملفات والعديد من واجهات برمجة التطبيقات على الويب.

هل يمكن لـ Base64 ترميز أي ملف، أم النصوص فقط؟

أي بيانات ثنائية: صور وملفات PDF ومفاتيح وملفات تنفيذية. يعمل Base64 على البايتات الخام، لذا لا يهم نوع المحتوى الأصلي.

هل يرسل هذا الأداة بياناتي إلى أي مكان؟

لا. يعمل الترميز وفك الترميز بالكامل في متصفحك. لا يُرفع أو يُسجَّل أي شيء تلصقه.

افتح المزيد مع Logto Cloud