Base64 چیست و چرا به وجود آمد
Base64 یک روش رمزگذاری باینری به متن است. بایتهای خام را میگیرد - نوع دادهای که تصاویر، آرشیوها، کلیدهای رمزنگاری یا هر چیز دیگری را که متن ساده خوانا نیست تشکیل میدهد - و آنها را با استفاده از الفبای کوچک و ایمنی از ۶۴ کاراکتر قابل چاپ بازنویسی میکند: ۲۶ حرف بزرگ A-Z، ۲۶ حرف کوچک a-z، ده رقم ۰-۹ و دو نماد اضافه که معمولاً + و / هستند. علامت مساوی برای padding در انتها استفاده میشود. چون هر کاراکتری که تولید میکند ASCII معمولی است، نتیجه میتواند از طریق سیستمهایی که فقط برای پردازش متن طراحی شدهاند عبور کند.
دقیقاً به همین دلیل Base64 اختراع شد. بسیاری از پروتکلهای قدیمیتر - ایمیل بارزترین مثال است - فرض میکنند محتوایی که حمل میکنند متن است. اگر داده باینری خام به آنها بدهید، برخی بایتها خراب، حذف یا به عنوان کاراکترهای کنترلی تفسیر میشوند و داده آسیبدیده میرسد. Base64 این مشکل را با تبدیل بایتها به شکلی که هر کانال ایمن متنی بدون آسیب از آن عبور میدهد دور میزند. داده اصلی میتواند در طرف دیگر دقیقاً بازسازی شود.

تبدیل چگونه کار میکند
از نظر مکانیکی، Base64 ورودی را به تکههای سهبایتی - یعنی ۲۴ بیت - گروهبندی میکند و سپس همان ۲۴ بیت را به چهار گروه ششبیتی تقسیم میکند. شش بیت میتواند ۶۴ مقدار ممکن نمایش دهد، و دقیقاً به همین دلیل الفبا ۶۴ کاراکتر دارد. بنابراین سه بایت ورودی همیشه به چهار کاراکتر خروجی تبدیل میشوند. وقتی طول ورودی مضرب سه نباشد، رمزگذار آخرین گروه را با یک یا دو کاراکتر = pad میکند تا رمزگشا بداند داده واقعی کجا تمام میشود.
این نسبت چهار به سه همان جایی است که جریمه معروف اندازه از آن میآید: خروجی Base64 تقریباً ۳۳٪ بزرگتر از داده اصلی است. اگر متن کدگذاریشده به خطوط با عرض ثابت پیچیده شود، همانطور که استانداردهای ایمیل اغلب میخواهند، چند درصد اضافی هم برای شکست خطها میپردازید. این سربار بهای سازگاری است و برای اکثر کاربردها معاملهای منصفانه است.
کجا با Base64 مواجه میشوید
وقتی بدانید دنبال چه میگردید، Base64 همه جا در محاسبات روزمره دیده میشود:
- Data URI. یک تصویر یا فونت کوچک میتواند مستقیماً با یک URI از نوع
data:در HTML یا CSS جاسازی شود، با محتوای فایل به صورت Base64 نوشته شده. مرورگر آن را درونخطی رمزگشایی میکند و یک درخواست شبکه جداگانه ذخیره میشود. - پیوستهای ایمیل. MIME که استانداردی است که به ایمیل اجازه میدهد فایل حمل کند، برای انتقال پیوستهای باینری از طریق یک سیستم ایمیل فقط متنی بدون آسیب به Base64 متکی است.
- احراز هویت HTTP Basic. هدر آشنای
Authorization: Basic ...فقط نام کاربری و رمز عبوری است که با دونقطه متصل و Base64 رمزگذاری شدهاند - و دقیقاً به همین دلیل است که Basic auth باید همیشه روی HTTPS اجرا شود. - توکنها و پیکربندی. JSON Web Token، گواهینامهها، کلیدهای SSH و بیشمار مقدار پیکربندی به عنوان Base64 ذخیره یا منتقل میشوند تا از copy-paste و فضای ذخیرهسازی متنمحور جان سالم به در ببرند.
رمزگذاری رمزنگاری نیست
این مهمترین چیزی است که باید بدانید، و هم مبتدیان و هم توسعهدهندگان باتجربه دچار سوءتفاهم در این مورد میشوند. Base64 رمزنگاری نیست و هیچ امنیتی فراهم نمیکند. هیچ کلید مخفی، هیچ رمز عبور و هیچ چیز خصوصی در آن وجود ندارد. تبدیل کاملاً عمومی و کاملاً برگشتپذیر است: هر کسی که یک رشته Base64 ببیند میتواند در یک ثانیه آن را به بایتهای اصلی برگرداند، با استفاده از ابزاری دقیقاً مثل همین.
بنابراین Base64 مکان بدی برای پنهان کردن رمزهای عبور، کلیدهای API یا هر مقدار حساسی است. اگر یک رشته صرفاً به نظر درهم و برهم برسد، این آن را محافظتشده نمیکند. رمزنگاری، برخلاف آن، داده را با یک کلید مخفی تبدیل میکند تا فقط کسی که آن کلید را دارد بتواند آن را بخواند. این دو مشکلات مختلفی را حل میکنند: رمزنگاری از محرمانگی محافظت میکند، Base64 از سازگاری. اغلب با هم استفاده میشوند - ممکن است داده را با AES رمزنگاری کنید و سپس متن رمزشده را Base64 کنید تا از یک کانال متنی عبور کند - اما یکی هرگز جایگزین دیگری نیست.

رمزگذاری در برابر رمزگشایی
دو جهت آینه سادهای از یکدیگرند. رمزگذاری متن یا باینری اصلی شما را میگیرد و رشته کاراکتری Base64 را تولید میکند. رمزگشایی یک رشته Base64 میگیرد و دقیقاً بایتهای اصلی را بازسازی میکند. ابزار ما هر دو را مستقیماً در مرورگر شما انجام میدهد - هیچ چیزی که تایپ یا الصاق میکنید به سرور ارسال نمیشود، بنابراین عملیات کاملاً محلی و خصوصی است. این یعنی میتوانید یک توکن در حال اشکالزدایی را رمزگشایی کنید یا یک قطعه کد برای جاسازی را رمزگذاری کنید، بدون اینکه دادهتان صفحه را ترک کند.
برای تبدیلهای مرتبط، ابزار رمزگذاری/رمزگشایی URL ما را برای percent-encoding ببینید، یا وقتی نیاز دارید بخشهای Base64 درون یک توکن را بررسی کنید از رمزگشای JWT استفاده کنید. اینها را در کنار بقیه ابزارهای توسعهدهنده ما خواهید یافت.
پرسشهای متداول
آیا Base64 نوعی رمزنگاری است؟
خیر. Base64 یک رمزگذاری است، نه رمزنگاری. از هیچ کلیدی استفاده نمیکند و توسط هر کسی کاملاً برگشتپذیر است، بنابراین هیچ امنیتی ارائه نمیدهد. برای محافظت از داده حساس از رمزنگاری واقعی مثل AES یا RSA استفاده کنید.
چرا Base64 داده را بزرگتر میکند؟
Base64 هر سه بایت ورودی را به چهار کاراکتر خروجی تبدیل میکند که تقریباً ۳۳٪ به اندازه اضافه میکند. اگر خروجی به خطوط با طول ثابت تقسیم شود، شکست خطها چند درصد دیگر اضافه میکنند.
Base64 از چه کاراکترهایی استفاده میکند؟
الفبای استاندارد شامل ۲۶ حرف بزرگ، ۲۶ حرف کوچک، ارقام ۰ تا ۹ و نمادهای + و / است، با علامت مساوی برای padding در انتها.
آیا میتوانم رمزهای عبور را به صورت ایمن در Base64 ذخیره کنم؟
خیر. Base64 فقط ظاهر داده را تغییر میدهد، نه اینکه چه کسی میتواند آن را بخواند. هر کسی میتواند فوراً آن را رمزگشایی کند. رمزهای عبور باید با یک الگوریتم قوی هش شوند و اطلاعات مخفی باید رمزنگاری شوند.
آیا این ابزار Base64 خصوصی است؟
بله. رمزگذاری و رمزگشایی کاملاً در مرورگر شما انجام میشوند. هیچ چیزی که وارد میکنید آپلود یا به هیچ سروری ارسال نمیشود، بنابراین دادهتان روی دستگاه خودتان میماند.
تفاوت رمزگذاری و رمزگشایی چیست؟
رمزگذاری متن یا باینری اصلی را به یک رشته Base64 تبدیل میکند. رمزگشایی این فرایند را معکوس میکند و یک رشته Base64 را به دقیقاً بایتهای اصلی برمیگرداند. آنها عملیات آینهای هستند.
