استاد پایه 64 برای توسعه Frontend

راهنمای جامع برای درک پایه 64 رمزگذاری، رمزگشایی و کاربردهای عملی در طراحی وب مدرن.

امتحان کنید پایه 64 رمزگذاری / رمزگشایی

دقیقا چیه پایه 64?

پایه 64 یک طرح رمزگذاری باینری به متن است که داده های باینری (مانند تصاویر، فایل ها یا بایت های خام) را به کاراکترهای ASCII تبدیل می کند. این تبدیل به داده‌های باینری اجازه می‌دهد تا با خیال راحت در سیستم‌هایی که برای داده‌های متنی طراحی شده‌اند، مانند پروتکل‌های ایمیل، HTML یا پاسخ‌های API، ذخیره شوند.

نام "Base64" از استفاده آن از 64 کاراکتر متمایز (A-Z، a-z، 0-9، "+" و "/") برای نمایش مقادیر باینری گرفته شده است. هر کدام پایه 64 کاراکتر 6 بیت داده را رمزگذاری می کند و آن را راهی کارآمد برای مدیریت محتوای باینری در محیط های متن محور می کند.

برخلاف رمزگذاری، پایه 64 یک اقدام امنیتی نیست - صرفاً برای قالب بندی داده ها است. هر کسی می‌تواند محتوای Base64 را با ابزارهای اولیه رمزگشایی کند، بنابراین هرگز نباید برای محافظت از اطلاعات حساس از آن استفاده کرد.

مجموعه کاراکتر Base64

الف
ب
سی
D
E
اف
جی
اچ
من
جی
ک
L
م
ن
O
پ
س
آر
اس
تی
U
V
دبلیو
X
Y
ز
الف
ب
ج
د
ه
f
g
ساعت
x
y
z
0
1
2
3
4
5
6
7
8
9
+
/

* "=" به عنوان یک کاراکتر padding برای داده های ناقص استفاده می شود

چگونه پایه 64 کار رمزگذاری؟

  1. 1

    تبدیل داده های باینری به بایت های 8 بیتی

    فرآیند با داده های باینری (به عنوان مثال، یک فایل تصویر) شروع می شود. این داده ها به بخش های 8 بیتی (1 بایتی) تقسیم می شوند که ورودی خام را تشکیل می دهند پایه 64 رمزگذاری

  2. 2

    بایت ها را به قطعات 24 بیتی گروه بندی کنید

    از آنجایی که پایه 64 از کاراکترهای 6 بیتی استفاده می کند، بایت های 8 بیتی به تکه های 24 بیتی (3 بایتی) گروه بندی می شوند. 24 بیت را می توان به طور مساوی به چهار بخش 6 بیتی (4 × 6 = 24) تقسیم کرد.

  3. 3

    بخش های 6 بیتی را به کاراکترهای Base64 تبدیل کنید

    هر بخش 6 بیتی به یک مقدار اعشاری (0-63) تبدیل می شود. سپس این مقدار به یک کاراکتر مربوطه از نگاشت می شود پایه 64 مجموعه کاراکترها (به عنوان مثال، 0 = "A"، 1 = "B"، ...، 63 = "/").

  4. 4

    اضافه کردن بالشتک برای تکه های ناقص

    اگر طول داده باینری مضرب 3 بایت نباشد، قطعه نهایی ناقص خواهد بود. پایه 64 برای نشان دادن بایت های از دست رفته از نویسه های "=" استفاده می کند (1 "=" برای 1 بایت از دست رفته، 2 "=" برای 2 بایت از دست رفته).

مثال رمزگذاری Base64: متن "سلام!"

مرحله داده های ورودی نمایش باینری خروجی Base64
1. متن خام "سلام!"
2. بایت 8 بیتی (ASCII) H (72)، i (105)، ! (33) 01001000, 01101001, 00100001
3. قطعه 24 بیتی 72، 105، 33 010010000110100100100001
4. تقسیم به بخش های 6 بیتی 010010، 000110، 100100، 100001
5. تبدیل به اعشار 18، 6، 36، 33
6. نقشه به کاراکترهای Base64 "پوست"

Frontend پایه 64 موارد استفاده

آدرس های اینترنتی داده برای تصاویر

با استفاده از تصاویر کوچک (مانند نمادها یا آواتارها) مستقیماً در HTML/CSS جاسازی کنید پایه 64 URL های داده این درخواست‌های HTTP را کاهش می‌دهد و سرعت بارگذاری صفحه را برای دارایی‌های کوچک بهبود می‌بخشد.

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Icon">

API انتقال داده باینری

داده‌های باینری (مانند فایل‌ها یا فایل‌های PDF) را از طریق REST API با رمزگذاری آن‌ها به آن منتقل کنید پایه 64. با این کار از مشکلات مربوط به خرابی داده های باینری در بارهای API مبتنی بر متن (مانند JSON) جلوگیری می شود.

{ "fileData": "JVBERi0xLjQKJeLjz9MNCjYgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlciAvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeAovRjEgMTAgVGYKMDAwLjEwNS4wMDAuMTAwCjAwMC4yOTkuMDAwLjAwMAo...", "fileName": "report.pdf" }

محدودیت‌های متن کوکی و ذخیره‌سازی محلی

ذخیره داده‌های باینری کوچک در کوکی‌ها یا LocalStorage (که فقط متن را پشتیبانی می‌کنند) با رمزگذاری آن در پایه 64. برای ذخیره تنظیمات برگزیده کاربر یا دارایی های کوچک به صورت محلی مفید است.

// Save Base64 data to LocalStorage
localStorage.setItem('userAvatar', 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA...');

رمزگذاری پیوست ایمیل

اکثر پروتکل های ایمیل (مانند SMTP) فقط متنی هستند. پایه 64 برای رمزگذاری پیوست های ایمیل (تصاویر، اسناد) استفاده می شود تا بتوان آنها را بدون خرابی منتقل کرد.

Content-Type: image/jpeg; name="photo.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="photo.jpg"

/9j/4AAQSkZJRgABAQEAZABkAAD/7QBsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA...

رمزگذاری SVG درون خطی

فایل های SVG را رمزگذاری کنید پایه 64 برای استفاده درون خطی در پس‌زمینه‌های CSS یا ویژگی‌های HTML. این امر مدیریت دارایی را برای گرافیک های برداری کوچک ساده می کند.

.icon {
  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJBMTAgMTAgMCAwIDEgMjIgMTJBMTAgMTAgMCAwIDEgMTIgMjJBMTAgMTAgMCAwIDEgMiAxMkExMCAxMCAwIDAgMSAxMiAyWiIgc3Ryb2tlPSIjMTY1REZGIiBzdHJva2Utd2lkdGg9IjIiLz48L3N2Zz4=');
}

صادرات تصویر بوم

HTML5 Canvas API استفاده می کند پایه 64 برای صادر کردن محتوای ترسیم شده به عنوان داده تصویر (از طریق toDataURL()). این امکان ذخیره آثار هنری یا اسکرین شات های تولید شده توسط کاربر را فراهم می کند.

// Get Base64 data from Canvas
const canvas = document.getElementById('myCanvas');
const base64Image = canvas.toDataURL('image/png'); // "data:image/png;base64,iVBORw0KGgo..."

Frontend پایه 64 نمونه های کد

اساسی پایه 64 رمزگذاری / رمزگشایی

از جاوا اسکریپت داخلی استفاده کنید btoa() (دودویی به ASCII) و atob() توابع (ASCII-to-binary) برای ساده پایه 64 عملیات توجه: این توابع با رشته های UTF-8 کار می کنند.

// Encode text to Base64
function encodeToBase64(text) {
  // Encode UTF-8 to avoid issues with special characters
  const utf8Text = unescape(encodeURIComponent(text));
  return btoa(utf8Text);
}

// Decode Base64 to text
function decodeFromBase64(base64String) {
  const utf8Text = atob(base64String);
  return decodeURIComponent(escape(utf8Text));
}

// Example usage
const originalText = "Hello, Base64!";
const encodedText = encodeToBase64(originalText);
const decodedText = decodeFromBase64(encodedText);

console.log("Original:", originalText); // "Hello, Base64!"
console.log("Encoded:", encodedText);   // "SGVsbG8sIEJhc2U2NCE="
console.log("Decoded:", decodedText);   // "Hello, Base64!"

رمزگذاری تصویر به پایه 64

تبدیل یک فایل تصویری (انتخاب شده از طریق ورودی فایل) به پایه 64 با استفاده از FileReader API. برای پیش نمایش تصاویر قبل از آپلود یا جاسازی درون خطی مفید است.

// Get elements from DOM
const fileInput = document.getElementById('image-upload');
const previewImage = document.getElementById('image-preview');
const base64Output = document.getElementById('image-base64');

// Handle file selection
fileInput.addEventListener('change', (e) => {
  const file = e.target.files[0];
  if (!file || !file.type.startsWith('image/')) {
    alert('Please select an image file!');
    return;
  }

  // Create FileReader to read the image
  const reader = new FileReader();
  
  // On load, get Base64 data
  reader.onload = (event) => {
    const base64Data = event.target.result;
    
    // Preview the image
    previewImage.src = base64Data;
    previewImage.style.display = 'block';
    
    // Show Base64 data (truncated for readability)
    const truncatedData = base64Data.length > 100 
      ? base64Data.substring(0, 100) + '...' 
      : base64Data;
    base64Output.textContent = truncatedData;
  };
  
  // Read the file as Base64
  reader.readAsDataURL(file);
});

داده های Base64 (قطع شده):

پایه 64 به Blob (دانلود فایل)

تبدیل کنید پایه 64 داده‌ها را به یک Blob (شئی بزرگ باینری) برای ایجاد فایل‌های قابل دانلود (مانند PDF، تصاویر) در مرورگر باز می‌گرداند.

// Convert Base64 to Blob
function base64ToBlob(base64Data, contentType = 'application/octet-stream') {
  // Extract Base64 data (remove "data:..." prefix if present)
  const base64WithoutPrefix = base64Data.startsWith('data:')
    ? base64Data.split(',')[1]
    : base64Data;
  
  // Decode Base64 to binary string
  const binaryString = atob(base64WithoutPrefix);
  const byteLength = binaryString.length;
  
  // Convert binary string to Uint8Array
  const uint8Array = new Uint8Array(byteLength);
  for (let i = 0; i < byteLength; i++) {
    uint8Array[i] = binaryString.charCodeAt(i);
  }
  
  // Create and return Blob
  return new Blob([uint8Array], { type: contentType });
}

// Trigger file download from Blob
function downloadBlobAsFile(blob, fileName) {
  // Create temporary URL for Blob
  const url = URL.createObjectURL(blob);
  
  // Create anchor element to trigger download
  const a = document.createElement('a');
  a.href = url;
  a.download = fileName;
  
  // Simulate click to start download
  document.body.appendChild(a);
  a.click();
  
  // Clean up
  document.body.removeChild(a);
  URL.revokeObjectURL(url);
}

// Example: Download Base64 PDF
const base64Pdf = "JVBERi0xLjQKJeLjz9MNCjYgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlciAvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeAovRjEgMTAgVGYKMDAwLjEwNS4wMDAuMTAwCjAwMC4yOTkuMDAwLjAwMAo...";
const pdfBlob = base64ToBlob(base64Pdf, 'application/pdf');
downloadBlobAsFile(pdfBlob, 'report.pdf');

Vue.js پایه 64 جزء

یک جزء Vue.js قابل استفاده مجدد برای پایه 64 رمزگذاری / رمزگشایی با سیستم واکنش پذیری Vue برای به روز رسانی بلادرنگ ادغام می شود.

<template>
  <div class="base64-converter">
    <h3 class="text-lg font-semibold mb-4">Vue Base64 Converter</h3>
    
    <!-- Input for text -->
    <div class="mb-4">
      <label class="block mb-2 text-sm font-medium">Enter Text:</label>
      <textarea 
        v-model="inputText" 
        class="w-full p-2 border rounded"
        rows="3"
        placeholder="Type text to encode..."
      ></textarea>
      <button 
        @click="encode"
        class="mt-2 px-4 py-1 bg-primary text-white rounded"
      >Encode to Base64</button>
    </div>
    
    <!-- Output for Base64 -->
    <div class="mb-4">
      <label class="block mb-2 text-sm font-medium">Base64 Result:</label>
      <textarea 
        v-model="base64Output" 
        class="w-full p-2 border rounded"
        rows="3"
        readonly
      ></textarea>
      <button 
        @click="decode"
        class="mt-2 px-4 py-1 bg-secondary text-white rounded"
      >Decode to Text</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      inputText: '',
      base64Output: ''
    };
  },
  methods: {
    encode() {
      if (!this.inputText) return;
      // Encode UTF-8 text to Base64
      const utf8Text = unescape(encodeURIComponent(this.inputText));
      this.base64Output = btoa(utf8Text);
    },
    decode() {
      if (!this.base64Output) return;
      // Decode Base64 to UTF-8 text
      const utf8Text = atob(this.base64Output);
      this.inputText = decodeURIComponent(escape(utf8Text));
    }
  }
};
</script>

سوالات متداول درباره پایه 64

شروع به استفاده کنید پایه 64 در پروژه های فرانت اند شما

خواه در حال جاسازی تصاویر، انتقال فایل ها از طریق API، یا کار با محتوای تولید شده توسط کاربر، پایه 64 یک ابزار ضروری برای توسعه دهندگان وب مدرن است. از مثال های کد بالا برای ادغام استفاده کنید پایه 64 رمزگذاری و رمزگشایی در پروژه بعدی شما.