طريقة الاستخدام
- اكتب النص المراد ترميزه أو الصقه، أو غيّر «صيغة المدخلات» إلى «ست عشري» لترميز بايتات خام، أو انقر «فتح ملف» لترميز ملف.
- أبقِ «ترميز النص» على UTF-8 ما لم يتوقع النظام المستقبِل مجموعة أحرف أخرى.
- اضبط الخيارات: أبقِ «النوع» على «قياسي» في معظم الاستخدامات، وأوقف «الحشو» إذا كان الطرف المستقبِل لا يريده، واضبط «التفاف الأسطر» على 76 (MIME) أو 64 (PEM) حرفًا عند الحاجة.
- انسخ مخرجات 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.is | QmFzZTY0Lmlz |
你好 | 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 حجم بياناتي؟
تتحوّل كل 3 بايتات إلى 4 أحرف، مع التقريب إلى مجموعة كاملة، لذا تكون المخرجات أكبر بنحو 33%. ويضيف التفاف الأسطر وفق MIME بايتين آخرين (CRLF) لكل 76 حرفًا.