تخفیف عضویت ویژه تا 10 مهر فعال شد

آموزش Base64 در پایتون؛ نحوه Encode و Decode کردن داده‌ها

امیرحسین بیگدلو September 2026

ماژول base64 یکی از ماژول‌های استاندارد و کاربردی پایتون است که برای تبدیل داده‌های باینری به رشته‌های قابل‌انتقال و برعکس استفاده می‌شود. اگر با وب، API، JWT، فایل، تصویر، احراز هویت یا رمزنگاری کار می‌کنید، احتمالاً با Base64 زیاد کار خواهید کرد.

اگر نمیدانید باینری چیست، ویدیو آموزش اعداد باینری را تماشا کنید.

Base64 یک روش Encoding است، نه Encryption. یعنی هدفش این نیست که اطلاعات را مخفی یا امن کند؛ بلکه داده باینری را به مجموعه‌ای از کاراکترهای متنی تبدیل می‌کند که انتقال و ذخیره‌سازی آن‌ها راحت‌تر باشد.

import base64

text = "Hello"
encoded = base64.b64encode(text.encode())
print(encoded)

خروجی به شکل زیر خواهد بود:

b'SGVsbG8='

حالا می‌توانیم آن را دوباره به متن اصلی تبدیل کنیم:

decoded = base64.b64decode(encoded)
print(decoded)

# OUTPUT
b'Hello'

و برای تبدیل به str میتوانید به شکل زیر کار کنید:

print(decoded.decode())

# OUTPUT
Hello

دوره پیشنهادی: دوره آموزش الگوریتم نویسی برای مصاحبه شغلی پایتون

# ماژول Base64 پایتون چه کاربردی دارد؟

ممکن است برای شما سوال باشد که چرا اصلا باید داده باینری را کاراکتر های ASCII تبدیل کنیم. فرض کنید می‌خواهید یک تصویر را داخل یک JSON ارسال کنید.تصویر در اصل داده‌ی باینری است. ولی JSON اساساً برای انتقال داده‌های متنی طراحی شده است.

Base64 می‌تواند این داده را به چیزی شبیه این تبدیل کند:

iVBORw0KGgoAAAANSUhEUgAA...

حالا می‌توانید این رشته را داخل JSON قرار دهید:

{
    "image": "iVBORw0KGgoAAAANSUhEUgAA..."
}

سمت دریافت‌ کننده می‌تواند آن را Decode کرده و دوباره فایل باینری را به دست آورد.

 

# ماژول Base64 پایتون چطور کار میکند؟

ماژول Base64 از 64 کاراکتر اصلی ASCII استفاده می‌کند که به شرح زیر است:

A-Z
a-z
0-9
+
/

مجموع این کاراکترها 64 خواهد شد.

یک نکته مهم این است که Base64 حجم داده را کاهش نمی‌دهد؛ برعکس، معمولاً حجم را حدود ۳۳٪ افزایش می‌دهد. مثلاً:

Original: 100 bytes
Base64: ~136 bytes

پس Base64 برای فشرده‌سازی نیست.

 

# مهمترین توابع ماژول Base64

ماژول Base64 توابع زیادی دارد اما در پروژه‌های واقعی، بیشترین استفاده معمولاً این توابع هستند:

b64encode()
b64decode()
urlsafe_b64encode()
urlsafe_b64decode()

مقاله پیشنهادی: یونیکد و رمزگذاری کاراکتر در پایتون

+ تابع b64encode

این تابع برای encode کردن داده های استفاده میشود:

import base64

data = b"Hello World"
result = base64.b64encode(data)
print(result)

# OUTPUT
b'SGVsbG8gV29ybGQ='

دقت کن که خروجی یک bytes است، نه str . اگر رشته می‌خواهی باید تبدیل کنی:

result = base64.b64encode(data).decode()

print(result)

دقت کن که تابع b64encode مستقیماً str قبول نمی‌کند. باید ابتدا آن را به bytes تبدیل کنیم:

text = "Hello"

encoded = base64.b64encode(text.encode())
print(encoded)

 

+ تابع b64decode

این داده برعکس Encode است و داده های متنی را به باینری تبدیل میکند. مثلا:

import base64

encoded = b"SGVsbG8="
decoded = base64.b64decode(encoded)
print(decoded)

خروجی به شکل bytes است و اگر میخواهید نوع داده رشته داشته باشید:

decoded = base64.b64decode(encoded).decode()

print(decoded)

 

+ تابع urlsafe_b64encode

Base64 معمولی از دو کاراکتر /+ استفاده می‌کند. این کاراکترها در URL می‌توانند مشکل‌ساز شوند. برای همین Python یک نسخه URL-safe دارد. با تابع urlsafe_b64encode به جای کاراکتر + از - و به جای کاراکتر / از _ استفاده میکند.

مثلا:

import base64

data = b"hello world"
encoded = base64.urlsafe_b64encode(data)
print(encoded)

و بعد برای decode کردن به شکل زیر کار کنید:

decoded = base64.urlsafe_b64decode(encoded)

print(decoded)

ویدیو پیشنهادی: تفاوت بین str و repr در پایتون

# ماژول Base64 و Unicode

Base64 روی bytes کار می‌کند، بنابراین برای فارسی ابتدا باید Encoding انجام دهیم. مثلاً:

import base64

text = "ایند مالس"
encoded = base64.b64encode(text.encode("utf-8"))
print(encoded)

و بعد:

decoded = base64.b64decode(encoded)

print(decoded.decode("utf-8"))

ویدیو پیشنهادی: فایل در پایتون

# ماژول Base64 و کار با فایل

یکی از کاربردهای مهم Base64 تبدیل فایل به رشته است. مثلاً یک تصویر داریم و میخواهیم این فایل باینری را به متن ASCII تبدیل کنیم:

import base64

with open("image.jpg", "rb") as file:
    data = file.read()

encoded = base64.b64encode(data)

print(encoded)

حالا encoded شامل محتوای Base64 تصویر است.

برای تبدیل متن ASCII به عکس اولیه باید عملیات را برعکس انجام دهید:

import base64

with open("image.jpg", "rb") as file:
    encoded = base64.b64encode(file.read())

decoded = base64.b64decode(encoded)

with open("new_image.jpg", "wb") as file:
    file.write(decoded)

در نتیجه فایل جدید از نظر داده با فایل اصلی یکسان خواهد بود.

 

# تفاوت Encoding و Encryption

این قسمت مهم است. هدف از Encoding تبدیل فرمت داده است ولی هدف Encryption محافظت از داده با استفاده از یک کلید است.

مثلا در Encoding:

Hello
 ↓
SGVsbG8=

اما در Encryption:

Hello
 ↓
Encrypted Data

و برای رمزگشایی نیاز به Key داریم.

 

# یک نکته درباره عملکرد Base64

اگر فایل بزرگی دارید، معمولاً Base64 انتخاب خوبی نیست. مثلاً یک فایل 10MB ممکن است بعد از Base64 به حجم 13.3MB برسد. ضمن اینکه Encoding و Decoding هم CPU و هم Memory مصرف می‌کند. برای فایل‌های بزرگ معمولاً بهتر است فایل را به صورت واقعی با :

multipart/form-data

ارسال کنی.

Base64 بیشتر برای مواردی مثل:

  • Tokenها
  • داده‌های کوچک
  • JSON
  • تصاویر کوچک
  • Data URI
  • بعضی APIها
  • انتقال داده‌های باینری در محیط‌های متنی

مناسب است.

 

# نتیجه گیری

در این آموزش، با ماژول Base64 در پایتون به‌صورت کامل آشنا شدید و یاد گرفتید چگونه داده‌های متنی و باینری را با استفاده از base64 به فرمت Base64 تبدیل کرده و مجدداً Decode کنید. نحوه استفاده از توابع b64encode و b64decode، تبدیل و ذخیره فایل‌ها به Base64، کار با Base64URL و کاربردهای آن در APIها، JWT، احراز هویت و انتقال داده‌های باینری را بررسی کردیم.

ویدیوهای مشابه



آموزش NotImplemented در پایتون
امیرحسین بیگدلو

ارسال نظر

فعلا نظری برای نمایش وجود ندارد
مونگارد