رمزگذار/رمزگشای Base64
تبدیل متن به و از کدگذاری Base64
رمزگذار و رمزگشای Base64
مقدمه
Base64 یک طرح کدگذاری باینری به متن است که دادههای باینری را در یک فرمت رشتهای ASCII نمایش میدهد. این طرح برای انتقال دادههای ذخیره شده در فرمتهای باینری از طریق کانالهایی طراحی شده است که تنها بهطور قابلاعتماد از محتوای متنی پشتیبانی میکنند. کدگذاری Base64 دادههای باینری را به مجموعهای از 64 کاراکتر (از این رو نام آن) تبدیل میکند که میتوانند بهطور ایمن از طریق پروتکلهای مبتنی بر متن منتقل شوند بدون اینکه دادهها خراب شوند.
مجموعه کاراکترهای Base64 شامل:
- حروف بزرگ A-Z (26 کاراکتر)
- حروف کوچک a-z (26 کاراکتر)
- اعداد 0-9 (10 کاراکتر)
- دو کاراکتر اضافی، معمولاً "+" و "/" (2 کاراکتر)
این ابزار به شما اجازه میدهد تا بهراحتی متن را به فرمت Base64 کدگذاری کنید یا رشتههای Base64 را به متن اصلی خود بازگردانید. این ابزار بهویژه برای توسعهدهندگان، متخصصان IT و هر کسی که با دادههایی کار میکند که نیاز به انتقال ایمن از طریق کانالهای مبتنی بر متن دارند، مفید است.
نحوه کار کدگذاری Base64
فرآیند کدگذاری
کدگذاری Base64 با تبدیل هر گروه از سه بایت (24 بیت) داده باینری به چهار کاراکتر Base64 کار میکند. این فرآیند مراحل زیر را دنبال میکند:
- تبدیل متن ورودی به نمایش باینری آن (با استفاده از کدگذاری ASCII یا UTF-8)
- گروهبندی دادههای باینری به قطعات 24 بیتی (3 بایت)
- تقسیم هر قطعه 24 بیتی به چهار گروه 6 بیتی
- تبدیل هر گروه 6 بیتی به کاراکتر مربوطه Base64
هنگامی که طول ورودی بر 3 بخشپذیر نیست، با کاراکترهای "=" پر میشود تا نسبت طول خروجی به ورودی 4:3 حفظ شود.
نمایش ریاضی
برای یک دنباله از بایتها ، کاراکترهای مربوطه Base64 بهصورت زیر محاسبه میشوند:
که در آن نمایانگر کاراکتر -ام در الفبای Base64 است.
فرآیند رمزگشایی
رمزگشایی Base64 فرآیند کدگذاری را معکوس میکند:
- تبدیل هر کاراکتر Base64 به مقدار 6 بیتی آن
- الحاق این مقادیر 6 بیتی
- گروهبندی بیتها به قطعات 8 بیتی (بایتها)
- تبدیل هر بایت به کاراکتر مربوطه آن
پر کردن
زمانی که تعداد بایتها برای کدگذاری بر 3 بخشپذیر نیست، پر کردن اعمال میشود:
- اگر یک بایت باقی مانده باشد، به دو کاراکتر Base64 تبدیل میشود و به دنبال آن "==" قرار میگیرد
- اگر دو بایت باقی مانده باشد، به سه کاراکتر Base64 تبدیل میشود و به دنبال آن "=" قرار میگیرد
مثال
بیایید متن "Hello" را به Base64 کدگذاری کنیم:
- نمایش ASCII "Hello": 72 101 108 108 111
- نمایش باینری: 01001000 01100101 01101100 01101100 01101111
- گروهبندی به قطعات 6 بیتی: 010010 000110 010101 101100 011011 000110 1111
- آخرین قطعه تنها 4 بیت دارد، بنابراین با صفرها پر میشود: 010010 000110 010101 101100 011011 000110 111100
- تبدیل به دهدهی: 18, 6, 21, 44, 27, 6, 60
- جستجو در الفبای Base64: S, G, V, s, b, G, 8
- نتیجه "SGVsbG8=" است
توجه کنید که "=" در انتها به دلیل اینکه طول ورودی (5 بایت) بر 3 بخشپذیر نیست، وجود دارد.
فرمول
فرمول کلی برای محاسبه طول یک رشته کدگذاری شده Base64 بهصورت زیر است:
که در آن نمایانگر تابع سقف (گرد کردن به نزدیکترین عدد صحیح بالاتر) است.
موارد استفاده
کدگذاری Base64 در برنامههای مختلف بهطور گستردهای استفاده میشود:
-
ضمیمههای ایمیل: MIME (پسوندهای اینترنتی چندمنظوره) از Base64 برای کدگذاری ضمیمههای باینری در ایمیل استفاده میکند.
-
URLهای داده: جاسازی تصاویر کوچک، فونتها یا منابع دیگر بهطور مستقیم در HTML، CSS یا JavaScript با استفاده از طرح URL
data:
. -
ارتباطات API: انتقال ایمن دادههای باینری در بارهای JSON یا سایر فرمتهای متنی API.
-
ذخیره دادههای باینری در فرمتهای متنی: زمانی که دادههای باینری باید در XML، JSON یا سایر فرمتهای متنی ذخیره شوند.
-
سیستمهای احراز هویت: احراز هویت پایه در HTTP از کدگذاری Base64 استفاده میکند (هرچند این برای امنیت نیست، بلکه فقط برای کدگذاری است).
-
رمزنگاری: بهعنوان بخشی از پروتکلها و سیستمهای رمزنگاری مختلف، اغلب برای کدگذاری کلیدها یا گواهینامهها.
-
مقادیر کوکی: کدگذاری ساختارهای داده پیچیده برای ذخیره در کوکیها.
Alternatives
در حالی که Base64 بهطور گستردهای استفاده میشود، گزینههای جایگزینی وجود دارد که ممکن است در برخی شرایط مناسبتر باشند:
-
Base64 ایمن برای URL: یک نوع که به جای "+" و "/" از "-" و "_" استفاده میکند تا از مشکلات کدگذاری URL جلوگیری کند. برای دادههایی که در URLها گنجانده میشوند، مفید است.
-
Base32: از یک مجموعه 32 کاراکتری استفاده میکند که منجر به خروجی طولانیتری میشود اما با خوانایی بهتر برای انسان و عدم حساسیت به حروف بزرگ و کوچک همراه است.
-
کدگذاری هگز: تبدیل ساده به هگزادسیمال، که کمتر کارآمد است (اندازه را دو برابر میکند) اما بسیار ساده و بهطور گستردهای پشتیبانی میشود.
-
انتقال باینری: برای فایلهای بزرگ یا زمانی که کارایی حیاتی است، پروتکلهای انتقال باینری مستقیم مانند HTTP با هدرهای مناسب Content-Type ترجیح داده میشوند.
-
فشردهسازی + Base64: برای دادههای متنی بزرگ، فشردهسازی قبل از کدگذاری میتواند افزایش اندازه را کاهش دهد.
-
سریالسازی JSON/XML: برای دادههای ساختاری، استفاده از سریالسازی بومی JSON یا XML ممکن است مناسبتر از کدگذاری Base64 باشد.
تاریخچه
کدگذاری Base64 ریشه در سیستمهای اولیه رایانه و مخابرات دارد که در آن دادههای باینری نیاز به انتقال از طریق کانالهایی داشتند که برای متن طراحی شده بودند.
مشخصات رسمی Base64 برای اولین بار در سال 1987 بهعنوان بخشی از RFC 989 منتشر شد که پست الکترونیکی محافظتشده (PEM) را تعریف میکرد. این بعداً در RFC 1421 (1993) و RFC 2045 (1996، بهعنوان بخشی از MIME) بهروزرسانی شد.
اصطلاح "Base64" از این واقعیت ناشی میشود که کدگذاری از 64 کاراکتر ASCII مختلف برای نمایش دادههای باینری استفاده میکند. این انتخاب 64 کاراکتر عمدی بود، زیرا 64 یک توان از 2 (2^6) است که تبدیل بین باینری و Base64 را کارآمد میکند.
با گذشت زمان، چندین نوع مختلف Base64 ظهور کرده است:
- Base64 استاندارد: همانطور که در RFC 4648 تعریف شده است، از A-Z، a-z، 0-9، +، / و = برای پر کردن استفاده میکند
- Base64 ایمن برای URL: از - و _ بهجای + و / استفاده میکند تا از مشکلات کدگذاری URL جلوگیری کند
- Base64 ایمن برای نام فایل: مشابه Base64 ایمن برای URL، طراحیشده برای استفاده در نام فایلها
- Base64 اصلاحشده برای IMAP: در پروتکل IMAP با مجموعهای متفاوت از کاراکترهای خاص استفاده میشود
با وجود اینکه بیش از سه دهه از عمر آن میگذرد، Base64 هنوز یک ابزار اساسی در رایانههای مدرن است، بهویژه با افزایش برنامههای وب و APIهایی که به شدت به فرمتهای داده متنی مانند JSON وابسته هستند.
مثالهای کد
در اینجا مثالهایی از کدگذاری و رمزگشایی Base64 در زبانهای برنامهنویسی مختلف آورده شده است:
// کدگذاری/رمزگشایی Base64 در جاوااسکریپت
function encodeToBase64(text) {
return btoa(text);
}
function decodeFromBase64(base64String) {
try {
return atob(base64String);
} catch (e) {
throw new Error("رشته Base64 نامعتبر است");
}
}
// مثال استفاده
const originalText = "Hello, World!";
const encoded = encodeToBase64(originalText);
console.log("کدگذاری شده:", encoded); // SGVsbG8sIFdvcmxkIQ==
try {
const decoded = decodeFromBase64(encoded);
console.log("رمزگشایی شده:", decoded); // Hello, World!
} catch (error) {
console.error(error.message);
}
موارد و ملاحظات حاشیهای
هنگام کار با کدگذاری و رمزگشایی Base64، به این ملاحظات مهم توجه داشته باشید:
-
کاراکترهای یونیکد و غیر ASCII: هنگام کدگذاری متنی با کاراکترهای غیر ASCII، اطمینان حاصل کنید که قبل از کدگذاری Base64، کدگذاری کاراکتر مناسب (معمولاً UTF-8) اعمال شده است.
-
پر کردن: Base64 استاندارد از پر کردن با کاراکترهای "=" برای اطمینان از اینکه طول خروجی مضرب 4 است، استفاده میکند. برخی از پیادهسازیها اجازه میدهند که پر کردن حذف شود که میتواند باعث مشکلات سازگاری شود.
-
شکست خط: پیادهسازیهای سنتی Base64 شکست خط را (معمولاً هر 76 کاراکتر) برای خوانایی وارد میکنند، اما برنامههای مدرن اغلب این کار را حذف میکنند.
-
Base64 ایمن برای URL: Base64 استاندارد از کاراکترهای "+" و "/" استفاده میکند که در URLها معانی خاصی دارند. برای زمینههای URL، از Base64 ایمن برای URL استفاده کنید که این کاراکترها را با "-" و "_" جایگزین میکند.
-
فضای خالی: هنگام رمزگشایی، برخی از پیادهسازیها نرمخویانه هستند و فضای خالی را نادیده میگیرند، در حالی که برخی دیگر نیاز به ورودی دقیق دارند.
-
افزایش اندازه: کدگذاری Base64 بهطور تقریبی 33% اندازه دادهها را افزایش میدهد (4 بایت خروجی برای هر 3 بایت ورودی).
-
عملکرد: کدگذاری/رمزگشایی Base64 میتواند برای دادههای بسیار بزرگ محاسباتی سنگین باشد. برای فایلهای بزرگ، رویکردهای جریانی را در نظر بگیرید.