إذا رأيت من قبل جدارًا من الأحرف مثل SGVsbG8gV29ybGQ= وافترضت أنه مشفر — فأنت لست وحدك. Base64 هي واحدة من أكثر الأدوات سوء فهم في مجموعة أدوات المطور. إنها لا تشفير. إنها لا تحمي بيانك. إنها فقط تجعل البيانات الثنائية آمنة للسفر عبر الأنظمة النصية فقط.
ما هو Base64 بالفعل
Base64 هي مخطط ترميز يحول البيانات الثنائية إلى سلسلة من 64 حرفًا ASCII قابلة للطباعة: A–Z, a–z, 0–9, +، و /. الاسم يأتي من حجم مجموعة الأحرف هذه — 64 رمز، يمثل كل منها 6 بتات من البيانات.
كل 3 بايتات من الإدخال (24 بت) تُعين إلى 4 أحرف Base64 (4 × 6 بتات = 24 بت). إذا كان طول الإدخال غير قابل للقسمة على 3، = تملأ أحرف الحشو المجموعة الأخيرة. هذا هو السبب في أنك غالباً ما ترى علامة واحدة أو اثنتان من علامات المساواة في نهاية سلسلة Base64.
لماذا موجودة
تم بناء بعض القنوات بشكل صارم للنصوص. البروتوكولات البريد الإلكتروني القديمة (SMTP)، رؤوس HTTP، حمولات JSON، وخصائص HTML جميعها لها قيود على البايتات التي يمكنها نقلها بدون سوء تفسير. يمكن أن يتعرض الملف الثنائي الخام الذي يمر عبر هذه القنوات للتلف — يتم تجريد البايتات الفارغة، وتحويل نهايات الأسطر، وتفعيل أحرف التحكم للسلوك غير المقصود.
Base64 تحيد كل هذا. من خلال تحويل البيانات الثنائية إلى مجموعة يمكن التنبؤ بها من الأحرف القابلة للطباعة، يمكنك بأمان دمج الصور في بيانات CSS URIs، وإرفاق الملفات برسائل البريد الإلكتروني، وحشو الرموز في رؤوس HTTP، وتضمين الحمولات الثنائية داخل JSON. المقابل: البيانات المشفرة أكبر بحوالي 33% من الأصلية.
كيف يعمل الترميز (النسخة المختصرة)
خذ السلسلة Man. في بايتات ASCII: 77 97 110. في ثنائي: 01001101 01100001 01101110. قسم إلى مجموعات بـ 6 بتات: 010011 010110 000101 101110. عين كل واحد إلى أبجدية Base64: T W F u → TWFu.
يدخل الحشو عندما يكون هناك بايتات متبقية. بايت واحد متبقي ينتج عنه حرفان Base64 بالإضافة إلى ==. بايتان متبقيان ينتجان ثلاثة أحرف بالإضافة إلى =.
Base64 ليست أمانًا
هذا يستحق التكرار. Base64 قابلة للعكس من قبل أي شخص لديه فك تشفير — لا مفتاح مطلوب، لا كلمة مرور مطلوبة. استخدامها لـ "إخفاء" كلمات المرور أو الرموز أو البيانات الحساسة في الكود من جانب العميل لا يوفر أي حماية. يعرف المهاجمون ما تبدو عليه Base64. الخاتمة = هي نقطة ضعف.
إذا كنت بحاجة لحماية البيانات في السكون، استخدم التشفير الصحيح (AES-256). إذا كنت بحاجة لحماية البيانات أثناء النقل، استخدم TLS. Base64 هي وسيلة نقل مريحة، وليست طبقة أمان.
متى يتم استخدام Base64
- بيانات URIs — دمج الصور مباشرة في HTML أو CSS:
src="data:image/png;base64,iVBOR..." - رؤوس المصادقة الأساسية — تشفير المصادقة الأساسية HTTP
username:passwordكـ Base64 فيAuthorizationرأس (يحتاج إلى HTTPS للأمان الفعلي) - JWTs — استخدم JSON Web Tokens صيغة Base64URL لترميز أقسام الرأس والحمولة
- الحمولات الثنائية في JSON/XML — عندما تتحدث صيغة API أو رسالة فقط نصوص
- مرفقات البريد الإلكتروني — يستخدم ترميز MIME Base64 لأجزاء الملفات الثنائية
لترميز وفك تشفير سريع في المتصفح، استخدم مشفر/فك تشفير Base64 يتعامل مع كل من المتغيرات القياسية والآمنة للعناوين بدون تثبيت أي شيء.
الترميز وفك التشفير في الممارسة
بايثون
import base64
# Encode
encoded = base64.b64encode(b"Hello, World!")
print(encoded) # b'SGVsbG8sIFdvcmxkIQ=='
# Decode
decoded = base64.b64decode(b"SGVsbG8sIFdvcmxkIQ==")
print(decoded) # b'Hello, World!'
Bash
# Encode
echo -n "Hello, World!" | base64
# SGVsbG8sIFdvcmxkIQ==
# Decode
echo "SGVsbG8sIFdvcmxkIQ==" | base64 --decode
# Hello, World!
JavaScript (المتصفح و Node.js)
// Encode (browser)
const encoded = btoa("Hello, World!");
console.log(encoded); // SGVsbG8sIFdvcmxkIQ==
// Decode (browser)
const decoded = atob("SGVsbG8sIFdvcmxkIQ==");
console.log(decoded); // Hello, World!
// Node.js
const enc = Buffer.from("Hello, World!").toString("base64");
const dec = Buffer.from(enc, "base64").toString("utf8");
ملحوظة: btoa و atob تتعامل فقط مع أحرف Latin-1 في المتصفحات. بالنسبة للسلاسل Unicode، قم بالتحويل إلى تمثيل بايتات أولاً باستخدام TextEncoder.
Base64 القياسي مقابل الآمن للعناوين
يستخدم Base64 القياسي + و / — كلا الحرفين لهما معنى خاص في العناوين وسلاسل الاستعلام. يبدل Base64 الآمن للعناوين هذه لتجنب مشاكل الترميز:
| ملكية | Base64 القياسي | Base64 الآمن للعناوين |
|---|---|---|
| مجموعة الأحرف | A–Z, a–z, 0–9, +, / | A–Z, a–z, 0–9, -, _ |
| حشوة | = (مطلوب) | = (غالباً ما يتم حذفه) |
| آمن للعناوين؟ | لا — + و / يجب ترميزها بنسبة مئوية | نعم — آمن في العناوين وأسماء الملفات |
| الاستخدام الشائع | البريد الإلكتروني، MIME، ترميز عام | JWTs، رموز OAuth، معاملات URL |
في Python، استخدم base64.urlsafe_b64encode() لمخرجات آمنة للعناوين. تزيل JWTs تحديداً الحشو الخاتمة = — وهذا بخير، لأن فك التشفير يمكنه استنتاجه من طول السلسلة.
النقطة العملية الرئيسية
يحل Base64 مشكلة محددة وواضحة: نقل البيانات الثنائية عبر القنوات النصية فقط بدون تلف. إنها تقوم بهذه المهمة بشكل جيد. إنها لا تحمي البيانات أو تضغطها أو تتحقق من صحتها. عندما تحتاج إلى ترميز أو فك تشفير البيانات base64 — سواء كانت صورة أو رمز أو كتلة ثنائية — الآن تعرف بالضبط ما الذي تفعله ولماذا. استخدم الأداة الصحيحة للعمل الصحيح، والتجأ إلى التشفير عندما يكون الأمان هو الهدف الفعلي.
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
