مُشفِّر الملفات Base64
تشفير أي ملف إلى Base64: PDF وZIP والصور وأكثر
اسحب أي ملف هنا أو انقر للرفع
أي نوع من الملفات: PDF وZIP والصور والملفات الثنائية
ما هو تشفير الملفات بـ Base64؟
يحوّل تشفير الملفات بـ Base64 الملفات الثنائية — ملفات PDF وZIP والصور والملفات التنفيذية والخطوط والصوت — إلى نص ASCII خالص باستخدام الأبجدية المحددة في RFC 4648. كل ثلاثة بايتات من البيانات الثنائية تتحول إلى أربعة محارف Base64، مما ينتج تمثيلاً نصياً يمكنه العبور عبر القنوات المصممة حصراً للنصوص: حمولات JSON في واجهات API وملفات XML وأجسام البريد الإلكتروني وسمات HTML ومتغيرات البيئة.
على عكس تشفير النصوص بـ Base64 الذي يعمل على السلاسل النصية، يقرأ تشفير الملفات بـ Base64 تدفق البايتات الخام لأي ملف بصرف النظر عن تنسيقه. الترويسات الثنائية لملف PDF والكتل المضغوطة لملف ZIP وبيانات البكسل لملف PNG — كلها تُعالَج بالطريقة ذاتها: كتسلسل من الثمانيات لإعادة ترميزها. والنتيجة دائماً ASCII صالح، آمن للتضمين في أي مكان يقبل المحارف القابلة للطباعة.
المقايضة هي الحجم: مخرجات Base64 أكبر بنحو 33% من الثنائي الأصلي. بالنسبة لملف PDF بحجم 1 ميغابايت، يعني ذلك نحو 1.33 ميغابايت من نص Base64. هذه الزيادة هي ثمن تمثيل البايتات ذات 8 بتات بمحارف ذات 6 بتات، وهي متأصلة في الترميز — لا يمكن لأي تنفيذ تجنبها. على الرغم من ذلك، يظل تشفير الملفات بـ Base64 الأسلوب المعياري لتضمين البيانات الثنائية في التنسيقات النصية فقط، وهو محدد عبر MIME في RFC 2045 وعناوين URI للبيانات في RFC 2397 ورموز JSON Web Token في RFC 7519.
لماذا تستخدم مشفر الملفات Base64 هذا؟
تُشفِّر هذه الأداة الملفات إلى Base64 مباشرةً في متصفحك باستخدام FileReader API. لا يُرفع أي ملف إلى خادم — يتم التحويل بالكامل من جهة العميل في JavaScript.
حالات استخدام تشفير الملفات بـ Base64
الزيادة في حجم الملف عند التشفير بـ Base64
يزيد تشفير Base64 حجم البيانات بمقدار الثلث تماماً. كل 3 بايتات مدخلة تنتج 4 محارف مخرجة (كل منها يمثل 6 بتات). تُضاف محارف الحشو (=) عندما لا يكون طول المدخل مضاعفاً للعدد 3. يوضح الجدول أدناه العلاقة بين حجم الملف الأصلي وحجم المخرج المُشفَّر.
| حجم الملف | البايتات الخام | بايتات Base64 | الزيادة |
|---|---|---|---|
| 1 KB | 1,024 B | 1,368 B | +33.3% |
| 10 KB | 10,240 B | 13,656 B | +33.4% |
| 100 KB | 102,400 B | 136,536 B | +33.3% |
| 1 MB | 1,048,576 B | 1,398,104 B | +33.3% |
| 5 MB | 5,242,880 B | 6,990,508 B | +33.3% |
| 10 MB | 10,485,760 B | 13,981,016 B | +33.3% |
مرجع عناوين URI للبيانات وأنواع MIME
يُضمِّن عنوان URI للبيانات محتوى الملف مباشرةً في HTML أو CSS أو JavaScript بالتنسيق data:[نوع MIME];base64,[البيانات المُشفَّرة]. يخبر نوع MIME المتصفح بكيفية تفسير البايتات المُفكَّكة. يوضح الجدول أدناه امتدادات الملفات الشائعة وأنواع MIME الخاصة بها وبادئة عنوان URI للبيانات المقابلة.
| الامتداد | نوع MIME | بادئة URI للبيانات |
|---|---|---|
| application/pdf | data:application/pdf;base64,... | |
| .zip | application/zip | data:application/zip;base64,... |
| .png | image/png | data:image/png;base64,... |
| .jpg | image/jpeg | data:image/jpeg;base64,... |
| .gif | image/gif | data:image/gif;base64,... |
| .svg | image/svg+xml | data:image/svg+xml;base64,... |
| .woff2 | font/woff2 | data:font/woff2;base64,... |
| .mp3 | audio/mpeg | data:audio/mpeg;base64,... |
| .wasm | application/wasm | data:application/wasm;base64,... |
| .bin | application/octet-stream | data:application/octet-stream;base64,... |
أمثلة الكود
تُظهر هذه الأمثلة القابلة للتشغيل كيفية قراءة ملف ثنائي وتشفيره إلى Base64 في JavaScript وPython وNode.js وbash وGo. كل مقتطف ينتج Base64 معياري (RFC 4648 القسم 4) مع الحشو.
// Read a file from an <input> element and encode to Base64
const input = document.querySelector('input[type="file"]')
input.addEventListener('change', (e) => {
const file = e.target.files[0]
const reader = new FileReader()
reader.onload = () => {
const base64 = reader.result.split(',')[1]
console.log(base64) // → "JVBERi0xLjQK..." (raw Base64, no data URI prefix)
}
reader.readAsDataURL(file)
})
// Convert a Blob to Base64 with async/await
async function blobToBase64(blob) {
const buffer = await blob.arrayBuffer()
const bytes = new Uint8Array(buffer)
let binary = ''
bytes.forEach(b => binary += String.fromCharCode(b))
return btoa(binary) // → standard Base64 string
}import base64
from pathlib import Path
# Encode a file to Base64
file_bytes = Path('document.pdf').read_bytes()
encoded = base64.b64encode(file_bytes).decode('ascii')
print(encoded[:40]) # → "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PA..."
# Write encoded output to a text file
Path('document.b64.txt').write_text(encoded)
# Build a data URI from a file
mime_type = 'application/pdf'
data_uri = f'data:{mime_type};base64,{encoded}'
print(data_uri[:60]) # → "data:application/pdf;base64,JVBERi0xLj..."import { readFileSync, writeFileSync } from 'fs'
// Encode a file to Base64
const buffer = readFileSync('archive.zip')
const base64 = buffer.toString('base64')
console.log(base64.length) // → 1398104 (for a ~1 MB file)
// Save Base64 output to a file
writeFileSync('archive.b64.txt', base64)
// Build a data URI
const mime = 'application/zip'
const dataUri = `data:${mime};base64,${base64}`# Encode a file to Base64 (macOS / Linux) base64 < document.pdf > document.b64.txt # Encode with no line wrapping (GNU coreutils) base64 -w 0 < document.pdf > document.b64.txt # Encode and copy to clipboard (macOS) base64 < image.png | pbcopy # Encode with OpenSSL (available everywhere) openssl base64 -in archive.zip -out archive.b64.txt # Pipe directly into curl for API upload base64 -w 0 < photo.jpg | curl -X POST -d @- https://api.example.com/upload
package main
import (
"encoding/base64"
"fmt"
"os"
)
func main() {
data, err := os.ReadFile("document.pdf")
if err != nil {
panic(err)
}
encoded := base64.StdEncoding.EncodeToString(data)
fmt.Println(len(encoded)) // → 1398104 (for a ~1 MB file)
// Write to file
os.WriteFile("document.b64.txt", []byte(encoded), 0644)
}