مُرمّز/مُفكّك Base64

يرمّز النص إلى Base64 أو يفكّ ترميزه منه. يدعم المتغيّرين القياسي والآمن للروابط (base64url)؛ ومتوافق مع UTF-8. تتم العملية بالكامل في متصفحك؛ ولا يُرسَل النص إلى الخادم.

آخر تحديث:

الوضع
المتغيّر
يستخدم Base64 القياسي + و/ و=. ويستبدلها base64url بـ - و_ ويُسقط الحشو؛ ويُستخدَم بأمان في الروابط وJWT. ويتعرّف فكّ الترميز على المتغيّرين تلقائيًا.
الإدخال
أدخل النص المراد ترميزه أو فكّه. يتحدّث المخرَج أثناء الكتابة.

المخرَج

متى يدخل Base64 في عملك

عند نقل نص عربي عبر قناة لا تضمن الترميز

الترويسات والروابط وبعض الأنظمة القديمة لا تقبل إلا محارف ASCII. ترميز النص العربي إلى Base64 يحوّله إلى محارف تعبر أي قناة نصية ثم يعود سالمًا عند الطرف الآخر.

عند فتح مصدر رسالة بريد

مرفقات البريد الإلكتروني تُنقَل مرمّزةً بـ Base64 وفق معيار MIME؛ الكتل الطويلة التي تراها في مصدر الرسالة هي الصور والملفات نفسها. من يفهم هذا يفهم أيضًا لماذا يكبر حجم الرسالة عن حجم مرفقاتها.

عند تمرير اسم ملف عربي في ترويسة

ترويسات HTTP والبريد لا تحمل إلا ASCII، واسم مثل «تقرير المبيعات.pdf» يصل مشوّهًا إن مرّ كما هو. البريد يحلّها بكلمة مرمّزة على هيئة =?UTF-8?B?…?= وداخلها Base64؛ أما HTTP فيستخدم filename* بترميز النسبة المئوية. الآليتان مختلفتان، والخلط بينهما يعطي اسمًا مقروءًا في عميل وحروفًا مبعثرة في آخر.

مثال محسوب: كلمة مرحبا تحت الترميز

خمسة أحرف عربية تكفي لإظهار قاعدتي الحجم والحشو معًا.

  1. رمّز كلمة مرحبا: الناتج 2YXYsdit2KjYpw==.
  2. الكلمة خمسة أحرف لكنها عشرة بايتات، لأن كل حرف عربي يشغل بايتين في UTF-8.
  3. تُقسَم العشرة إلى ثلاث مجموعات كاملة من ثلاثة بايتات، ويتبقى بايت واحد.
  4. المجموعات الثلاث تعطي 12 محرفًا، والبايت المتبقي يعطي محرفين مع حشو ==؛ المجموع 16 محرفًا.
  5. فُكّ الناتج فتعود مرحبا حرفًا بحرف: الترميز بلا فقد في الاتجاهين.

قاعدة الحشو تُقرأ من الطرفين: بايت متبقٍّ واحد ينتهي بـ ==، وبايتان ينتهيان بـ =، ولا بقيّة تعني لا حشو. وبالعكس، من طول سلسلة Base64 وعلامات الحشو وحدها تستطيع حساب حجم الأصل بالبايت دون فكّها: الطول ÷ 4 × 3 ناقص عدد علامات =.

أربعة أخطاء متكررة

الخلط بين الأبجديتين عند التكامل

نظام يرمّز بالأبجدية القياسية وآخر يفكّ بالمتغيّر الآمن للروابط: النتيجة خطأ «محرف غير صالح» عند أول + أو /. حدّد الأبجدية في عقد التكامل كما تحدّد صيغة التاريخ.

افتراض أن الترميز يحفظ السرّية

القيمة المرمّزة تبدو غامضة لعين عابرة، وفكّها يستغرق ثانية بلا أي مفتاح. كل ما يوضع في Base64 يجب معاملته كنص مكشوف من ناحية الأمان.

الظنّ أن Base64 يضغط

الاسم يوحي بمعالجة، والنتيجة عكسها: كل ثلاث بايتات تصير أربعة محارف، أي زيادة الثلث. ومن يرمّز حمولة كبيرة أملًا في تصغيرها يدفع الزيادة مرتين، في الشبكة وفي الذاكرة. إن أردت التصغير فالضغط أولًا والترميز بعده إن لزم، لا العكس.

إغفال ترميز المحارف قبل التحويل

النص العربي نفسه يعطي ناتج Base64 مختلفًا تمامًا إذا حُوّل إلى بايتات UTF-16 بدل UTF-8؛ وفي .NET مثلًا Encoding.Unicode ليس Encoding.UTF8. وحّد الترميز النصي على الطرفين قبل مقارنة أي ناتج.

أدوات تُستعمل إلى جانبها

  • محلّل JWT حلّل قسمَي الترويسة والحمولة في JSON Web Token، وشاهد المطالبات القياسية ومدة الصلاحية. لا يغادر الـ token المتصفح.
  • مُرمّز/مُفكّك HTML / Entity رمّز النص إلى كيانات HTML أو فُكّ ترميزه. اهرب المحارف الخاصة لمنع XSS؛ في المتصفح، دون تسجيل.
  • حاسبة CIDR / Subnet احسب عنوان الشبكة والبث وقناع الشبكة الفرعية ونطاق المضيفين القابل للاستخدام ونوع العنوان من تدوين CIDR.
  • محلّل تعبير Cron حلّل تعبير cron حقلًا بحقل وشاهد أوقات التشغيل التالية. لـ Kubernetes CronJob والمهام المجدولة.
  • محوّل Epoch / Unix Timestamp حوّل طوابع Unix epoch الزمنية إلى تواريخ مقروءة والعكس. يُكتشَف وضع الثواني والميلي ثانية تلقائيًا.

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

هل Base64 طريقة تشفير؟

لا. Base64 ترميز وليس تشفيرًا — لا يوفّر سرّية. ويمكن لأي شخص فكّه دون مفتاح. وغرضه نقل البيانات الثنائية بأمان عبر قنوات تقبل النص فقط (الروابط، JSON، البريد، data URI).

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

تستخدم أبجدية Base64 القياسية + و/ كمحرفين 62 و63، وتضيف = للحشو. أمّا base64url فيستبدل هذين المحرفين المُشكِلين في الروابط وأسماء الملفات بـ - و_، ويُسقط الحشو غالبًا. وأقسام JWT الثلاثة مُرمَّزة بـ base64url. وتتعرّف هذه الأداة على المتغيّرين تلقائيًا عند فكّ الترميز.

لماذا يكبّر Base64 حجم البيانات؟

يحوّل Base64 كل 3 بايتات إلى 4 محارف ASCII؛ أي زيادة بنحو 33%. لذا فهو غير فعّال لتخزين أو نقل الملفات الكبيرة — ويناسب البيانات الصغيرة المضمَّنة (أيقونة، شهادة، token).

كيف يُستخدَم Base64 في .NET؟

تُرمّز Convert.ToBase64String(byte[])، وتفكّ Convert.FromBase64String(string). وللنص حوّله أولًا إلى بايتات عبر Encoding.UTF8.GetBytes. ومع .NET 9+ يدعم صنف Base64Url المتغيّر الآمن للروابط مباشرةً.

هل تُنقَل محارف UTF-8 بسلامة في Base64؟

نعم — بشرط تحويل النص أولًا إلى بايتات UTF-8. وهذا ما تفعله هذه الأداة بالضبط: تُحفَظ النصوص العربية أو التركية أو الرموز التعبيرية بدقّة عند الترميز وفكّه. والترميز الخاطئ (افتراض Latin-1 مثلًا) يؤدّي إلى تلف.