ترميز النصوص والملفات إلى Base64

حوّل النصوص أو البايتات الخام أو أي ملف إلى Base64. اختر مجموعة الأحرف التي يتوقعها الطرف المستقبِل، واحتفظ بحشو = أو احذفه، ولُفّ الأسطر عند 76 أو 64 حرفًا لتوافق MIME وPEM.

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

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

  1. اكتب النص المراد ترميزه أو الصقه، أو غيّر «صيغة المدخلات» إلى «ست عشري» لترميز بايتات خام، أو انقر «فتح ملف» لترميز ملف.
  2. أبقِ «ترميز النص» على UTF-8 ما لم يتوقع النظام المستقبِل مجموعة أحرف أخرى.
  3. اضبط الخيارات: أبقِ «النوع» على «قياسي» في معظم الاستخدامات، وأوقف «الحشو» إذا كان الطرف المستقبِل لا يريده، واضبط «التفاف الأسطر» على 76 (MIME) أو 64 (PEM) حرفًا عند الحاجة.
  4. انسخ مخرجات Base64 أو نزّلها في ملف.

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

يقرأ المُرمِّز المدخلات ثلاثة بايتات في كل مرة. وتُقسَّم هذه البتات الأربع والعشرون إلى أربع مجموعات كل منها 6 بت، وتحدّد كل قيمة من 6 بت (من 0 إلى 63) حرفًا واحدًا: A-Z للقيم من 0 إلى 25، وa-z للقيم من 26 إلى 51، و0-9 للقيم من 52 إلى 61، ثم + و/. تدخل ثلاثة بايتات وتخرج أربعة أحرف، ولهذا يكون Base64 أكبر من البيانات الأصلية بنحو 33%.

Text     M        a        n
Bytes    77       97       110
Bits     01001101 01100001 01101110
6-bit    010011 010110 000101 101110
Index    19     22     5      46
Base64   T      W      F      u

الحشو وطول المخرجات

إذا لم يكن طول المدخلات من مضاعفات الثلاثة، تبقى المجموعة الأخيرة ناقصة. فالبايت المتبقي الواحد يصبح حرفين تليهما ==، والبايتان المتبقيان يصبحان ثلاثة أحرف تليها علامة = واحدة. لذلك يبلغ طول المخرجات المحشوة دائمًا 4 × ceil(n / 3) حرفًا عندما تتكوّن المدخلات من n بايت.

لا يحمل الحشو أي بيانات. وتستغني عنه JSON Web Tokens ومعاملات URL والعديد من واجهات API، لذا أوقف «الحشو» عندما يتوقع الطرف المستقبِل مخرجات بلا حشو. وللروابط وأسماء الملفات، اختر النوع الآمن لعناوين URL أو استخدم صفحة Base64URL، فكلاهما يضع - و_ مكان + و/.

التفاف الأسطر لـ MIME وPEM

تكون المخرجات افتراضيًا سطرًا واحدًا طويلًا، وهذا ما تحتاجه JSON وdata URI وترويسات HTTP. لكن هناك صيغتين تتوقعان فواصل أسطر:

  • MIME، 76 حرفًا. يجب ألا يتجاوز طول الأسطر في مرفقات البريد الإلكتروني المرسلة مع Content-Transfer-Encoding: base64 ستة وسبعين حرفًا (RFC 2045). ويُنهي هذا الخيار الأسطر بـ CRLF كما يشترط MIME.
  • PEM، 64 حرفًا. تستخدم الشهادات والمفاتيح الواقعة بين السطرين -----BEGIN و-----END أسطرًا من 64 حرفًا (RFC 7468). ويستخدم هذا الخيار نهايات الأسطر LF.

مجموعات الأحرف والملفات

يرمّز Base64 البايتات لا الحروف، لذا يُحوَّل النص أولًا إلى بايتات وفق مجموعة أحرف معيّنة. فالحرف é يشغل بايتين في UTF-8 لكنه بايت واحد في ISO-8859-1 أو Windows-1252، ولذلك ينتج النص نفسه سلسلة Base64 مختلفة. وUTF-8 هو الخيار الصحيح للويب وJSON ولكل واجهات API الحديثة تقريبًا؛ فلا تختر GBK أو Shift_JIS أو Windows-1251 أو غيرها إلا لمطابقة نظام قديم.

تُرمَّز الملفات تمامًا كما هي مخزّنة، دون أي تحويل لمجموعة الأحرف. وللصور مع مقتطفات HTML وCSS جاهزة، راجع تحويل الصورة إلى Base64؛ وللحصول على data URI مع نوع MIME المكتشف، استخدم تحويل الملف إلى Base64.

المواصفات

الأبجديةA-Z a-z 0-9 + /
حجم المخرجات4 أحرف لكل 3 بايتات (نحو 133%)
الحشوبالرمز = حتى يصبح الطول من مضاعفات 4
المعيارRFC 4648، القسم 4
حساس لحالة الأحرفنعم

أمثلة

المدخلات (UTF-8)المخرجات
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

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

لماذا تختلف مخرجات Base64 لديّ عن مخرجات مُرمِّز آخر؟
غالبًا لأن بايتات المدخلات مختلفة. ومن الأسباب المعتادة: سطر جديد زائد في النهاية (يضيفه الأمر echo في سطر الأوامر؛ استخدم printf '%s' أو echo -n)، أو مجموعة أحرف مختلفة، أو نهايات أسطر Windows في النص، أو اختلاف إعدادات الحشو أو الأبجدية أو التفاف الأسطر. فالبايتات نفسها مع الخيارات نفسها تعطي دائمًا المخرجات نفسها.
كيف أرمّز نص Unicode بـ Base64 في JavaScript؟
لا تقبل btoa() إلا الأحرف حتى U+00FF، وتُطلق خطأً عند أي حرف آخر. حوّل السلسلة أولًا إلى بايتات UTF-8، مثل btoa(String.fromCharCode(...new TextEncoder().encode(str))). وفي Node.js، استخدم Buffer.from(str, 'utf8').toString('base64').
كيف أرمّز بـ Base64 من سطر الأوامر؟
نفّذ printf '%s' 'your text' | base64 على Linux أو macOS. يلفّ الأمر base64 من GNU المخرجات عند 76 حرفًا افتراضيًا (أضف -w 0 للحصول على سطر واحد)، بينما يلفّها openssl base64 عند 64 حرفًا (أضف -A).
هل ترميز Base64 نوع من التشفير؟
لا. ليس لـ Base64 مفتاح، ويستطيع أي شخص عكسه باستخدام أداة فك ترميز Base64. فالغرض منه نقل البيانات الثنائية عبر قنوات لا تقبل إلا النصوص، لا إخفاء المعلومات.
بكم يزيد Base64 حجم بياناتي؟

تتحوّل كل 3 بايتات إلى 4 أحرف، مع التقريب إلى مجموعة كاملة، لذا تكون المخرجات أكبر بنحو 33%. ويضيف التفاف الأسطر وفق MIME بايتين آخرين (CRLF) لكل 76 حرفًا.