مشفر / مفكك Base64
مشفر ومفكك Base64 مجاني عبر الإنترنت. شفر النص أو الملفات إلى Base64 أو فك Base64 إلى نص مقروء.
أسقط ملفاً أو تصفح
خاص وآمن
المعالجة بالكامل في متصفحك. لا ترفع بياناتك لأي خادم.
دعم الملفات
حول الصور والمستندات والملفات الثنائية بسهولة إلى نص Base64.
جاهز دون اتصال
يعمل بدون إنترنت بعد التحميل.
الأسئلة الشائعة
ما هو ترميز Base64 وفيما يُستخدم؟
Base64 هو نظام ترميز من ثنائي إلى نصي يحوّل البيانات الثنائية إلى سلسلة نصية بصيغة ASCII باستخدام 64 حرفًا (A-Z، a-z، 0-9، +، /). يُستخدم بشكل أساسي لنقل البيانات الثنائية عبر بروتوكولات تعتمد على النصوص مثل HTTP و SMTP، أو في حمولات JSON. تشمل التطبيقات الشائعة مرفقات البريد الإلكتروني عبر MIME، وتضمين الصور في HTML و CSS كعناوين URL للبيانات، وترميز الحمولات في رموز JSON Web Tokens (JWT)، وتخزين البيانات الثنائية في أعمدة قواعد البيانات النصية.
هل Base64 تشفير؟ هل هو آمن؟
لا. Base64 هو نظام ترميز، وليس تشفيرًا. يمكن لأي شخص لديه سلسلة Base64 مُشفّرة أن يفك ترميزها ويعيدها إلى البيانات الأصلية فورًا دون الحاجة إلى أي مفتاح أو كلمة مرور أو سر. إنه لا يوفر أي سرية أو تكامل أو تحقق من الهوية. فكّر فيه كطريقة لتمثيل نفس البيانات بتنسيق مختلف — مثل ترجمة الإنجليزية إلى شفرة مورس. إذا كنت بحاجة إلى حماية بيانات حساسة، استخدم خوارزمية تشفير مناسبة (مثل AES) أولاً، ثم يمكنك اختياريًا ترميز البايتات المُشفّرة باستخدام Base64 للنقل.
لماذا تنتهي سلاسل Base64 أحيانًا بعلامات = أو ==؟
علامة = هي حشو. يعالج Base64 البيانات المدخلة في مجموعات من 3 بايتات (24 بت)، وينتج 4 أحرف Base64 لكل مجموعة. عندما لا يكون طول المدخلات مضاعفًا لـ 3 بايتات، يضيف الترميز أحرف حشو = لجعل الناتج مضاعفًا لـ 4 أحرف. تُضاف = واحدة عندما يتبقى 2 بايت، وتُضاف علامتا = عندما يتبقى بايت واحد فقط. على سبيل المثال، "Man" (3 بايتات) تُرمَّز إلى "TWFu" بدون حشو، لكن "Ma" (2 بايت) تُرمَّز إلى "TWE=" و "M" (1 بايت) تُرمَّز إلى "TQ==".
هل يجعل Base64 البيانات أكبر؟ ما مقدار الحمل الإضافي الذي يضيفه؟
نعم، يزيد ترميز Base64 حجم البيانات بنسبة 33% تقريبًا. لكل 3 بايتات من المدخلات الثنائية، يكون الناتج 4 بايتات، بالإضافة إلى الحشو الاختياري. لذا يصبح حجم ملف ثنائي بحجم 3 ميجابايت حوالي 4 ميجابايت عند ترميزه بـ Base64. هذه هي المقايضة مقابل القدرة على إرسال البيانات الثنائية عبر قنوات النصوص فقط. بالمقارنة مع ترميزات أخرى من ثنائي إلى نصي، فإن Base64 فعّال نسبيًا — فترميز hexadecimal على سبيل المثال يضيف حملًا إضافيًا بنسبة 100%.
ما الفرق بين Base64 القياسي و Base64url؟
يستخدم Base64 القياسي + و / في أبجديته و = للحشو. أما Base64url (Base64 الآمن للاستخدام في عناوين URL) فيستبدل + بـ - و / بـ _، وعادةً ما يحذف الحشو. هذا يجعل Base64url آمنًا للاستخدام في عناوين URL ومعاملات الاستعلام وأسماء الملفات دون الحاجة إلى ترميز نسبي إضافي. تم تعريف Base64url في RFC 4648 ويُستخدم على نطاق واسع في رموز JSON Web Tokens (JWT) ورموز OAuth وواجهات برمجة التطبيقات على الويب. على سبيل المثال، سلسلة Base64 قياسية مثل Pj4+Pz8/Pw== تصبح Pj4-Pz8_Pw في Base64url.
ما هو عنوان URL البيانات Base64 وكيف يُستخدم في HTML و CSS؟
عنوان URL البيانات هو نظام URI يضمّن البيانات مباشرة في مستند الويب. بالنسبة للصور، يكون التنسيق data:image/png;base64,iVBORw0KGgo.... يمكن استخدامه بدلاً من عنوان URL لملف في وسوم <img> في HTML وخصائص background-image في CSS. تلغي عناوين URL البيانات الحاجة إلى طلب HTTP منفصل لتحميل الصورة، مما قد يحسّن الأداء للأصول الصغيرة (عادةً أقل من 10 كيلوبايت). ومع ذلك، فإنها تزيد حجم ملف HTML/CSS بنسبة 33% تقريبًا وتمنع المتصفح من تخزين الصورة بشكل مستقل في الذاكرة المؤقتة.
هل يمكن تحويل أي ملف إلى Base64؟
نعم — يمكن ترميز أي بيانات ثنائية، سواء كانت نصًا أو صورة أو صوتًا أو فيديو أو PDF أو أرشيفًا مضغوطًا، إلى Base64. العملية واحدة: قراءة البايتات الخام للملف وتطبيق خوارزمية ترميز Base64. عند فك ترميز سلسلة Base64، تحصل على البايتات الأصلية بالضبط. هكذا تعمل مرفقات البريد الإلكتروني — يتم ترميز الملف الثنائي بـ Base64 قبل إرساله عبر SMTP، ويُفك ترميزه مرة أخرى إلى الملف الأصلي عند الطرف المستلم.
كيف أتعامل مع أحرف Unicode (مثل الإيموجي أو النصوص الصينية) عند ترميز Base64 في JavaScript؟
تعمل دالة btoa() المضمنة فقط مع أحرف Latin-1 (أحرف أحادية البايت). بالنسبة لسلاسل Unicode التي تحتوي على إيموجي أو أحرف صينية أو أحرف متعددة البايتات أخرى، تحتاج إلى التحويل إلى بايتات أولاً باستخدام واجهة TextEncoder: في Node.js، تتعامل فئة Buffer مع Unicode بشكل أصلي: Buffer.from('Hello 你好 🚀').toString('base64') تعمل دون أي معالجة خاصة.