مشفر Base64

ترميز النص أو البيانات بتنسيق Base64. مثالي لترميز البيانات الثنائية لنقل الويب.

0 حرف

ما هو ترميز Base64؟

Base64 هو مخطط ترميز ثنائي إلى نص يمثل البيانات الثنائية بتنسيق سلسلة ASCII. يُستخدم بشكل شائع لترميز البيانات الثنائية للنقل عبر وسائط تدعم النص فقط، مثل البريد الإلكتروني أو HTTP. تم تطويره كجزء من معيار MIME (ملحقات البريد الإلكتروني متعددة الأغراض)، وأصبح Base64 آلية ترميز أساسية في تطوير الويب الحديث وواجهات برمجة التطبيقات وبروتوكولات تبادل البيانات.

الاستخدامات الشائعة لترميز Base64

  • عناوين URI للبيانات في HTML/CSS: تضمين الصور والملفات الأخرى مباشرة في HTML أو CSS باستخدام عناوين URI للبيانات (مثل، data:image/png;base64,iVBORw0KG...). هذا يلغي طلبات HTTP منفصلة للصور الصغيرة، مما يحسن أوقات تحميل الصفحات. يُستخدم بشكل شائع للأيقونات والشعارات الصغيرة وملفات SVG المضمنة.
  • نقل واجهة برمجة التطبيقات JSON: إرسال البيانات الثنائية عبر واجهات برمجة تطبيقات JSON التي تدعم النص فقط. نظرًا لأن JSON هو تنسيق نصي، لا يمكنك تضمين البيانات الثنائية مباشرة (الصور، ملفات PDF، البيانات المشفرة). يحول ترميز Base64 الثنائي إلى نص، مما يسمح بالنقل في حمولات JSON. تستخدم واجهات برمجة التطبيقات RESTful هذا بشكل متكرر لتحميلات الملفات وتنزيلاتها.
  • مرفقات البريد الإلكتروني (MIME): يستخدم MIME (ملحقات البريد الإلكتروني متعددة الأغراض) Base64 لترميز مرفقات البريد الإلكتروني. عندما ترسل ملف PDF أو صورة أو أي ملف عبر البريد الإلكتروني، يتم ترميزه عادةً بـ Base64 في نص رسالة MIME. يفك عميل البريد الإلكتروني المستلم الترميز مرة أخرى إلى الملف الأصلي.
  • مصادقة HTTP الأساسية: تستخدم مصادقة HTTP الأساسية Base64 لترميز بيانات الاعتماد (اسم المستخدم:كلمة المرور) في رأس التخويل. على سبيل المثال، "Authorization: Basic dXNlcjpwYXNzd29yZA==" حيث السلسلة المشفرة هي "user:password" في Base64. ملاحظة: هذا ليس آمنًا بدون HTTPS، حيث يمكن فك تشفير Base64 بسهولة.
كيف يعمل ترميز Base64؟

يحول ترميز Base64 البيانات الثنائية 8 بت إلى أحرف 6 بت باستخدام مجموعة من 64 حرف ASCII (A-Z، a-z، 0-9، +، /). يتم تحويل كل 3 بايت من بيانات الإدخال إلى 4 أحرف Base64، مما يزيد حجم البيانات بنحو 33٪. إليك العملية التقنية:

  • الخطوة 1 - التجميع في كتل 3 بايت: يتم تقسيم بيانات الإدخال إلى مجموعات من 3 بايت (24 بت).
  • الخطوة 2 - التقسيم إلى أجزاء 6 بت: يتم تقسيم كل كتلة 24 بت إلى أربعة أجزاء 6 بت.
  • الخطوة 3 - التعيين إلى أحرف Base64: يتم تعيين كل قيمة 6 بت (0-63) إلى أحد 64 حرف ASCII: A-Z (القيم 0-25)، a-z (26-51)، 0-9 (52-61)، + (62)، / (63).
  • الخطوة 4 - الحشو: إذا لم يكن طول الإدخال قابلاً للقسمة على 3، يتم إضافة أحرف حشو (=) لجعل طول الإخراج مضاعفًا لـ 4.

مثال: السلسلة "cat" (ASCII: 99، 97، 116) تُرمز إلى "Y2F0". تصبح البايتات [99، 97، 116] ثنائية 01100011 01100001 01110100، والتي تنقسم إلى مجموعات 6 بت: 011000 110110 000101 110100، معيّنة إلى Y(24) 2(54) F(5) 0(52).

التاريخ والخلفية

نشأ ترميز Base64 مع RFC 2045 (MIME) في عام 1996 كطريقة لترميز مرفقات البريد الإلكتروني. قبل Base64، كان إرسال الملفات عبر البريد الإلكتروني مشكلاً لأن بروتوكولات البريد الإلكتروني صُممت لنص ASCII بـ 7 بت. حل Base64 هذه المشكلة عن طريق تحويل البيانات الثنائية 8 بت إلى أحرف ASCII 7 بت آمنة. اليوم، يتم تعريف Base64 بواسطة RFC 4648 ويُستخدم بعيدًا عن البريد الإلكتروني في تطوير الويب وواجهات برمجة التطبيقات والمصادقة وعناوين URI للبيانات والمزيد.

هل ترميز Base64 آمن؟

Base64 هو ترميز، وليس تشفيرًا. لا يوفر أي أمان ويمكن فك تشفيره بسهولة من قبل أي شخص. لا تستخدم Base64 وحده أبدًا لحماية البيانات الحساسة. تعرف على أمان الترميز

ترميز Base64 في لغات البرمجة

تحتوي معظم لغات البرمجة على وظائف مدمجة لترميز Base64. إليك أمثلة في اللغات الشائعة:

// الترميز الأساسي
$encoded = base64_encode($data);

// ترميز سلسلة UTF-8
$text = "Hello, 世界!";
$encoded = base64_encode($text);

// ترميز محتويات الملف
$fileData = file_get_contents('image.png');
$encoded = base64_encode($fileData);
// المتصفح (btoa لـ ASCII فقط)
const encoded = btoa('Hello'); // ASCII الأساسي

// المتصفح مع دعم UTF-8
const encoded = btoa(unescape(encodeURIComponent('Hello, 世界!')));

// المتصفحات الحديثة مع TextEncoder
const encoder = new TextEncoder();
const data = encoder.encode('Hello, 世界!');
const encoded = btoa(String.fromCharCode(...data));
import base64

# ترميز سلسلة (UTF-8 تلقائي)
text = "Hello, 世界!"
encoded = base64.b64encode(text.encode('utf-8')).decode('ascii')

# ترميز البايتات مباشرة
data = b'\x00\x01\x02\x03'
encoded = base64.b64encode(data).decode('ascii')

# ترميز ملف
with open('image.png', 'rb') as f:
    encoded = base64.b64encode(f.read()).decode('ascii')
import "encoding/base64"

// الترميز الأساسي
data := []byte("Hello, 世界!")
encoded := base64.StdEncoding.EncodeToString(data)

// ترميز آمن لعناوين URL
encoded := base64.URLEncoding.EncodeToString(data)

// الترميز إلى كاتب (للبيانات الكبيرة)
encoder := base64.NewEncoder(base64.StdEncoding, outputWriter)
encoder.Write(data)
encoder.Close()
import java.util.Base64;
import java.nio.charset.StandardCharsets;

// الترميز الأساسي
String text = "Hello, 世界!";
String encoded = Base64.getEncoder()
    .encodeToString(text.getBytes(StandardCharsets.UTF_8));

// ترميز آمن لعناوين URL
String encoded = Base64.getUrlEncoder()
    .encodeToString(text.getBytes(StandardCharsets.UTF_8));

// ترميز MIME (فواصل سطر كل 76 حرفًا)
String encoded = Base64.getMimeEncoder()
    .encodeToString(text.getBytes(StandardCharsets.UTF_8));
require 'base64'

# الترميز الأساسي
text = "Hello, 世界!"
encoded = Base64.encode64(text)

# ترميز صارم (بدون أسطر جديدة)
encoded = Base64.strict_encode64(text)

# ترميز آمن لعناوين URL
encoded = Base64.urlsafe_encode64(text)
using System;
using System.Text;

// الترميز الأساسي
string text = "Hello, 世界!";
byte[] bytes = Encoding.UTF8.GetBytes(text);
string encoded = Convert.ToBase64String(bytes);

// مع فواصل الأسطر (لـ MIME)
string encoded = Convert.ToBase64String(bytes,
    Base64FormattingOptions.InsertLineBreaks);

الأدوات ذات الصلة

هل تحتاج إلى فك تشفير Base64؟ استخدم فك تشفير Base64 لتحويل سلاسل Base64 مرة أخرى إلى نص أصلي أو بيانات ثنائية.

تعمل مع عناوين URL؟ جرب مشفر URL لجعل النص آمنًا لعناوين URL.

عرض المحتوى على صفحات الويب؟ استخدم مشفر كيانات HTML لمنع هجمات XSS.