مبدل رمزگذاری و رمزگشایی Base64 - ابزار آنلاین رایگان تبدیل Base64
ابزار رایگان رمزگذاری و رمزگشایی base64. تبدیل متن به Base64 یا رمزگشایی رشتههای Base64 به صورت فوری. پشتیبانی از رمزگذاری استاندارد و امن برای URL. نیازی به ورود نیست.
رمزگذار/رمزگشای Base64
تبدیل متن به و از رمزگذاری Base64
مستندات
چیست Base64 Encoding؟
Base64 یک طرح رمزگذاری متن-باینری است که دادههای باینری را به یک رشته ASCII با ۶۴ کاراکتر تبدیل میکند. زمانی که نیاز دارید تصاویر را از طریق ایمیل ارسال کنید، دادهها را در URLها جاسازی کنید یا اطلاعات باینری را از طریق APIهای JSON منتقل کنید، Base64 مشکل خرابی داده در کانالهای متنی را حل میکند.
رمزگذاری با مجموعه کاراکترهای خاصی کار میکند:
- حروف بزرگ A-Z (۲۶ کاراکتر)
- حروف کوچک a-z (۲۶ کاراکتر)
- ارقام ۰-۹ (۱۰ کاراکتر)
- دو نماد: "+" و "/" (۲ کاراکتر)
رمزگذار و رمزگشای base64 ما بلافاصله متن را به Base64 تبدیل میکند یا رشتههای Base64 را به متن خوانا برمیگرداند - بدون نیاز به نصب.
چرا Base64 در توسعه مدرن مهم است
هنگام ساخت برنامههای وب، مدام با Base64 مواجه خواهید شد. پیوستهای ایمیل از طریق رمزگذاری MIME از آن استفاده میکنند. URIهای داده در CSS و HTML برای جاسازی مستقیم تصاویر در کد به آن تکیه دارند. APIهای REST از آن برای انتقال دادههای باینری در بارهای JSON استفاده میکنند. حتی احراز هویت اولیه HTTP نیز به Base64 وابسته است (اگرچه رمزنگاری نیست - در ادامه بیشتر توضیح خواهیم داد).
آنچه این رمزگذاری را ضروری میکند این است: پروتکلهای متنی مانند HTTP، JSON و XML برای مدیریت قابل اطمینان دادههای باینری طراحی نشدهاند. یک تصویر باینری را بدون رمزگذاری از طریق یک API JSON ارسال کنید، احتمالاً با خرابی داده مواجه خواهید شد. Base64 اطمینان میدهد که دادههای باینری شما با نمایندگی کامل با کاراکترهای ASCII امن سالم میمانند.
نحوه استفاده از ابزار Base64
کدگذاری متن به Base64:
- متن خود را در قسمت ورودی تایپ یا جایگذاری کنید
- روی "کدگذاری به Base64" کلیک کنید یا تبدیل زنده را فعال کنید
- خروجی Base64 را برای استفاده در برنامه خود کپی کنید
رمزگشایی Base64 به متن:
- رشته Base64 خود را در قسمت ورودی جایگذاری کنید
- روی "رمزگشایی از Base64" کلیک کنید یا به حالت رمزگشایی تغییر دهید
- متن اصلی را در ناحیه خروجی مشاهده کنید
حالت تبدیل زنده نتایج را به طور خودکار هنگام تایپ به روز میکند، که برای آزمایش و اشکالزدایی سریع عالی است. ابزار متن UTF-8، از جمله ایموجی و کاراکترهای بینالمللی را پشتیبانی میکند.
نحوه کار کدگذاری Base64
کدگذاری هر سه بایت (۲۴ بیت) از دادههای ورودی را به چهار کاراکتر Base64 تبدیل میکند. آن را مانند یک ترجمهای تصور کنید که در آن گروههای ۳ بایت ورودی به گروههای ۴ کاراکتر خروجی تبدیل میشوند.
در اینجا فرآیند کدگذاری base64 مرحله به مرحله آمده است:
۱. تبدیل به باینری: متن ورودی شما به نمایش باینری خود (معمولاً UTF-8) تبدیل میشود ۲. گروهبندی در قطعات: دادههای باینری به قطعات ۲۴ بیتی (هر ۳ بایت) تقسیم میشود ۳. تقسیم به بخشهای ۶ بیتی: هر قطعه ۲۴ بیتی به چهار گروه ۶ بیتی تقسیم میشود ۴. نگاشت به کاراکترها: هر مقدار ۶ بیتی (۰-۶۳) به کاراکتر Base64 خود نگاشت میشود
چه اتفاقی میافتد وقتی ورودی شما بر ۳ تقسیم نمیشود؟ کاراکترهای پرکننده ("=") خأل را پر میکنند. این نسبت ثابت ۴:۳ بین طول خروجی و ورودی را حفظ میکند.
ریاضیات پشت Base64
برای دنبالهای از بایتهای ، کاراکترهای Base64 متناظر به صورت زیر محاسبه میشوند:
که در آن نشاندهنده -امین کاراکتر در الفبای Base64 است.
فرآیند رمزگشایی Base64
رمزگشایی، کدگذاری را با تبدیل کاراکترهای Base64 به باینری معکوس میکند:
۱. نگاشت هر کاراکتر Base64 به مقدار ۶ بیتی آن ۲. اتصال این مقادیر ۶ بیتی به یک جریان پیوسته بیت ۳. تقسیم به قطعات ۸ بیتی (بایت) ۴. تبدیل هر بایت به کاراکتر متناظر آن
درک پرکنندهها
پرکنندهها تضمین میکنند که طول خروجی همیشه مضربی از ۴ کاراکتر باشد:
- یک بایت باقیمانده: دو کاراکتر Base64 به علاوه "==" تولید میکند
- دو بایت باقیمانده: سه کاراکتر Base64 به علاوه "=" تولید میکند
اشتباه رایج، حذف کاراکترهای پرکننده هنگام ذخیرهسازی رشتههای Base64 است. اگرچه برخی رمزگشاییکنندهها پرکنندههای حذف شده را مدیریت میکنند، اما پیادهسازیهای دقیق آن را رد خواهند کرد. پرکنندهها را حفظ کنید مگر اینکه مطمئن باشید رمزگشاییکننده شما سهلگیر است.
مثال رمزگذاری Base64: "سلام"
بیایید مراحل رمزگذاری "سلام" با استفاده از مبدل base64 را بررسی کنیم:
- مقادیر ASCII: 72 101 108 108 111
- فرم باینری: 01001000 01100101 01101100 01101100 01101111
- گروهبندی در قطعات 6 بیتی: 010010 000110 010101 101100 011011 000110 1111
- پر کردن آخرین قطعه با صفر: 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
فرمول محاسبه طول رشته رمزگذاری شده:
\text{طول_رمزگذاری_شده} = 4 \times \lceil \frac{\text{طول_ورودی}}{3} \rceil
جایی که نشاندهنده تابع سقف (گرد کردن به بالاترین عدد صحیح) است.
کاربردهای واقعی Base64
در اینجا مواردی است که با کدگذاری base64 در سیستمهای تولیدی مواجه خواهید شد:
۱. پیوستهای ایمیل (کدگذاری MIME)
پروتکلهای ایمیل برای متن ASCII ۷ بیتی طراحی شدهاند. هنگامی که یک PDF یا تصویر را پیوست میکنید، MIME از Base64 برای تبدیل فایلهای باینری به متن مناسب ایمیل استفاده میکند. به همین دلیل پیوستهای ایمیل حدود ۳۳٪ بزرگتر از فایلهای اصلی هستند—این هزینه اضافی Base64 است.
۲. URIهای داده در توسعه وب
آیا تاکنون تصویری را مستقیماً در CSS یا HTML جاسازی کردهاید؟ این کار Base64 در عمل است:
1<img src="data:image/png;base64,iVBORw0KGgoAAAANS..." />
2این تکنیک درخواستهای HTTP را با جاسازی مستقیم داراییهای کوچک در کد کاهش میدهد. با این حال، برای تصاویر کوچک (زیر ۱۰ کیلوبایت) بهتر است—فایلهای بزرگتر رندر صفحه را کند میکنند زیرا نمیتوانند جداگانه کش شوند.
۳. انتقال دادهها در API
APIهای REST معمولاً از Base64 برای ارسال دادههای باینری از طریق JSON استفاده میکنند. هنگام آپلود تصاویر از طریق یک نقطه پایانی API که فقط JSON را میپذیرد، فایل را به Base64 کدگذاری میکنید. توجه داشته باشید که این ۳۳٪ به اندازه بار اضافه میکند، بنابراین برای فایلهای بزرگ multipart/form-data را در نظر بگیرید.
۴. احراز هویت اولیه HTTP
هدر Authorization از Base64 برای کدگذاری اعتبارنامهها استفاده میکند:
1Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
2هشدار حیاتی: Base64 رمزنگاری نیست. هر کسی میتواند آن را فوراً رمزگشایی کند. همیشه از HTTPS استفاده کنید—هرگز اعتبارنامههای کدگذاری شده Base64 را از طریق HTTP ساده ارسال نکنید.
۵. توکنهای JWT
توکنهای وب JSON (JWT) از کدگذاری Base64URL (یک نسخه امن برای URL) برای سه بخش خود استفاده میکنند. این امر امکان عبور ایمن توکنها در URLها و هدرهای HTTP را فراهم میکند.
۶. ذخیرهسازی دادههای باینری در پایگاه دادهها
هنگامی که پایگاه داده شما ستونهای باینری را پشتیبانی نمیکند یا نیاز به ذخیرهسازی دادههای باینری در فیلدهای JSON دارید، Base64 یک راهحل متنایمن ارائه میدهد. توجه داشته باشید که این ۳۳٪ به الزامات ذخیرهسازی اضافه میکند.
۷. ذخیرهسازی کوکی
کوکیها باید فقط شامل کاراکترهای ASCII باشند. هنگام ذخیرهسازی ساختارهای داده پیچیده یا دادههای باینری در کوکیها، کدگذاری Base64 آنها را کوکیایمن میکند.
زمانی که نباید از Base64 استفاده کرد
قبل از رمزگذاری همه چیز در Base64، این موقعیتها را در نظر بگیرید که انتخاب اشتباهی است:
انتقال فایلهای بزرگ: افزایش 33 درصدی اندازه به طور قابل توجهی پهنای باند و زمان بارگذاری را تحت تأثیر قرار میدهد. به جای آن از انتقال باینری مستقیم (multipart/form-data) استفاده کنید.
ذخیرهسازی تصاویر در سمت کلاینت: تصاویر Base64 در CSS یا HTML را نمیتوان به طور جداگانه کش کرد و رندر صفحه را مسدود میکنند. برای عملکرد بهتر، تصاویر را به عنوان فایلهای جداگانه ذخیره کنید.
ذخیرهسازی فایلهای بزرگ در پایگاه داده: ذخیرهسازی رشتههای Base64 با مگابایت در فیلدهای TEXT پایگاه داده، فضای ذخیرهسازی را هدر میدهد و پرسوجوها را کند میکند. به جای آن از ستونهای BLOB یا سرویسهای ذخیرهسازی فایل (S3، CloudFlare R2) استفاده کنید.
نیازهای امنیتی: Base64 هیچ امنیتی ارائه نمیدهد. از آن برای "پنهان کردن" کلیدهای API، رمزها یا دادههای حساس استفاده نکنید. از رمزگذاری مناسب استفاده کنید.
سناریوهای با عملکرد بالا: رمزگذاری/رمزگشایی Base64 بار اضافی CPU ایجاد میکند. هنگام پردازش هزاران درخواست در ثانیه، مدیریت باینری مستقیم عملکرد بهتری دارد.
جایگزینهای Base64: انتخاب رمزگذاری مناسب
Base64 همیشه بهترین انتخاب نیست. در اینجا مواردی که باید جایگزینها را در نظر بگیرید آمده است:
Base64 امن برای URL
Base64 استاندارد از "+" و "/" استفاده میکند که URLها را خراب میکند. Base64 امن برای URL آنها را با "-" و "_" جایگزین میکند. این نوع را برای موارد زیر استفاده کنید:
- پارامترهای پرسوجو
- مسیرهای URL
- توکنهای JWT
- هر دادهای که در URL منتقل میشود
رمزگذاری Base32
Base32 خروجی طولانیتری تولید میکند (۴۰٪ اضافه حجم در مقابل ۳۳٪) اما حساسیت به حروف بزرگ و کوچک را ندارد. Base32 را در موارد زیر انتخاب کنید:
- کاربران باید مقدار رمزگذاری شده را به صورت دستی تایپ کنند
- سیستمهای حساس به حروف بزرگ و کوچک مشکل ایجاد میکنند
- به تشخیص خطای بهتر نیاز دارید
رمزگذاری شانزدهدهی
هگز اندازه داده را دو برابر میکند (۱۰۰٪ اضافه حجم) اما ساده و به طور جهانی پشتیبانی میشود. برای موارد زیر ایدهآل است:
- نمایش مقادیر هش
- کدهای رنگ
- آدرسهای MAC
- شرایطی که خوانایی مهمتر از کارایی است
انتقال باینری مستقیم
برای فایلهای بزرگ، رمزگذاری متنی را کلاً حذف کنید. از multipart/form-data یا HTTP باینری با هدرهای Content-Type مناسب استفاده کنید. این روش جریمه اندازه ۳۳٪ را دور میزند و عملکرد را بهبود میبخشد.
فشردهسازی + Base64
هنگام رمزگذاری متن بزرگ یا دادههای تکراری، ابتدا آن را فشرده کنید (gzip یا deflate)، سپس Base64 را اعمال کنید. این روش اغلب خروجی کوچکتری نسبت به رمزگذاری Base64 خام ایجاد میکند.
تاریخچه مختصری از رمزگذاری Base64
Base64 از نیاز محاسبات اولیه برای انتقال دادههای باینری در کانالهای متنی ظهور کرد. مشخصه رسمی آن اولین بار در RFC 989 (1987) برای Privacy Enhanced Mail (PEM) ظاهر شد، سپس از طریق RFC 1421 (1993) و RFC 2045 (1996) به عنوان بخشی از MIME تکامل یافت.
نام "Base64" بازتاب دهنده الفبای 64 کاراکتری آن است. این اتفاقی نبود - 64 برابر با 2^6 است، که تبدیل باینری به Base64 را از طریق عملیات ساده جابجایی بیت به لحاظ ریاضی کارآمد میکند.
امروزه انواع Base64 شامل موارد زیر هستند:
- Base64 استاندارد (RFC 4648): استفاده از A-Z، a-z، 0-9، +، / با پَدینگ =
- Base64 امن برای URL: جایگزینی + و / با - و _ برای انتقال امن URL
- Base64URL: نسخه استاندارد IETF برای URLها و نامهای فایل
- Base64 اصلاح شده: IMAP از مجموعه کاراکتر خود برای نامهای mailbox استفاده میکند
پس از بیش از 35 سال، Base64 همچنان برای توسعه وب مدرن ضروری است، بهویژه با غلبه APIهای JSON و سرویسهای وب.
(ترجمه ادامه دارد...)
مشکلات و راهحلهای رایج Base64
مراقب این مسائل هنگام کار با یک کدگشای یا کدگذار base64 باشید:
۱. مشکلات کدگذاری کاراکتر
مشکل: کدگذاری متن با ایموجی یا کاراکترهای بینالمللی بدون تبدیل اول به UTF-8 باعث تولید خروجی خراب میشود.
راهحل: همیشه قبل از کدگذاری Base64 به بایت UTF-8 تبدیل کنید. در جاوااسکریپت، این یعنی مدیریت صحیح کاراکترهای چند بایتی—تابع داخلی btoa() با یونیکد شکست میخورد.
۲. پدینگ حذف شده یا نامعتبر
مشکل: برخی سیستمها کاراکترهای پدینگ "=" را حذف میکنند، که باعث شکست کدگشاهای سختگیر میشود.
راهحل: قبل از کدگشایی، بررسی کنید که طول یک ضریب ۴ باشد. اگر نیست، کاراکترهای "=" را اضافه کنید: while (str.length % 4) str += '='
۳. خط جدید در دادههای کدگذاری شده
مشکل: پیادهسازیهای MIME قدیمی خط جدید را هر ۷۶ کاراکتر اضافه میکنند. APIهای مدرن اغلب اینها را رد میکنند.
راهحل: تمام خطجدیدها و فاصلهها را قبل از کدگشایی حذف کنید: str.replace(/\s/g, '')
۴. Base64 امن برای URL در مقابل استاندارد
مشکل: استفاده از Base64 استاندارد (+، /) در URLها باعث مشکلات کدگذاری یا شکست مسیریابی میشود.
راهحل: برای URLها، از نسخه امن برای URL استفاده کنید. تبدیل بین آنها:
- استاندارد به امن برای URL: جایگزینی
+با-و/با_ - امن برای URL به استاندارد: برگرداندن جایگزینی
۵. عملکرد با فایلهای بزرگ
مشکل: کدگذاری فایلهای چند مگابایتی در حافظه میتواند مرورگرها را قفل یا برنامهها را خراب کند.
راهحل: از APIهای استریم استفاده کنید یا دادهها را تکهتکه کنید. مرورگرهای مدرن از API استریم برای پردازش فایلهای بزرگ بدون بارگذاری کامل در حافظه پشتیبانی میکنند.
۶. سوء تفاهمات امنیتی
اشتباه حیاتی: تلقی Base64 به عنوان رمزگذاری یا پنهانسازی امن.
واقعیت: Base64 کاملاً برگشتپذیر در میلیثانیه است. هرگز برای "پنهان" کردن دادههای حساس از آن استفاده نکنید. این برای کدگذاری است، نه امنیت. همیشه هنگامی که امنیت مهم است، آن را با رمزگذاری مناسب (AES، RSA) ترکیب کنید.
سؤالات متداول
آیا Base64 رمزنگاری است؟
خیر. Base64 یک روش رمزگذاری است، نه رمزنگاری. هر کسی میتواند Base64 را بلافاصله و بدون کلید رمزگشایی کند. رمزنگاری نیاز به یک کلید مخفی دارد و برگرداندن آن از نظر محاسباتی دشوار است. اگر به امنیت نیاز دارید، از الگوریتمهای رمزنگاری مانند AES-256 استفاده کنید، سپس اختیاراً دادههای رمزنگاری شده را برای انتقال در Base64 رمزگذاری کنید.
چرا Base64 اندازه دادهها را بزرگتر میکند؟
افزایش 33 درصدی اندازه ذاتی الگوریتم است. هر 3 بایت ورودی به 4 کاراکتر خروجی تبدیل میشوند زیرا Base64 از 6 بیت برای هر کاراکتر استفاده میکند در حالی که بایتهای استاندارد 8 بیت دارند. فرمول: 3 بایت × 8 بیت = 24 بیت؛ 24 بیت ÷ 6 بیت در هر کاراکتر = 4 کاراکتر.
آیا میتوانم تصاویر را به Base64 رمزگذاری کنم؟
بله، تصاویر میتوانند به Base64 رمزگذاری شوند. این کار برای URI دادهها در HTML/CSS و بارگذاریهای API رایج است. با این حال، این مبادلهها را در نظر بگیرید: تصاویر Base64 را نمیتوان جداگانه کش کرد، اندازه صفحه را 33 درصد افزایش میدهند و رندر اولیه را کند میکنند. از آن برای آیکونهای کوچک (زیر 10 کیلوبایت) استفاده کنید، نه عکسهای بزرگ.
تفاوت Base64 و Base64URL چیست؟
Base64URL برای URL امن است. Base64 استاندارد از "+" و "/" استفاده میکند که در URLها معانی خاصی دارند (فاصله و جداکننده مسیر). Base64URL آنها را با "-" و "_" جایگزین میکند که در URLها امن هستند. توکنهای JWT به همین دلیل از Base64URL استفاده میکنند.
چگونه خطاهای "رشته Base64 نامعتبر" را رفع کنم؟
علل رایج:
- کمبود پدینگ: کاراکترهای "=" را تا زمانی که طول بر 4 تقسیم شود اضافه کنید
- کاراکترهای نامعتبر: هر کاراکتر خارج از A-Z، a-z، 0-9، +، /، = را حذف کنید
- فاصلههای سفید: تمام فاصلهها، تبها و خطوط جدید را حذف کنید
- نسخه اشتباه: Base64 امن برای URL از - و _ به جای + و / استفاده میکند
آیا میتوانم با Base64 فایلهای باینری را رمزگشایی کنم؟
Base64 دادههای باینری را به متن رمزگذاری میکند و رمزگشایی این فرآیند را برمیگرداند. میتوانید هر فایل باینری (PDF، تصویر، ویدیو) را به Base64 رمزگذاری کنید، به عنوان متن انتقال دهید و سپس دوباره به باینری رمزگشایی کنید. نتیجه رمزگشایی شده دقیقاً مشابه فایل اصلی است.
چرا از Base64 برای پیوستهای ایمیل استفاده میشود؟
SMTP (پروتکل ایمیل) برای متن ASCII 7 بیتی طراحی شده است. پیوستهای باینری در حین انتقال خراب میشوند. MIME از Base64 برای تبدیل فایلهای باینری به متن امن ASCII که در مسیریابی ایمیل سالم میماند استفاده میکند. افزایش 33 درصدی اندازه، بهای سازگاری است.
چگونه کاراکترهای خاص را در Base64 رمزگذاری کنم؟
ابتدا متن خود را به بایتهای UTF-8 رمزگذاری کنید، سپس Base64 را روی آن بایتها اعمال کنید. این روش اطمینان میدهد که ایموجی، حروف با علامت و اسکریپتهای بینالمللی به درستی رمزگذاری میشوند. در جاوا اسکریپت، از TextEncoder به جای btoa() استفاده کنید که در یونیکد شکست میخورد:
1new TextEncoder().encode(text) // ابتدا به بایتهای UTF-8 تبدیل کنید
2آیا رمزگذاری Base64 برای فایلهای بزرگ کند است؟
رمزگذاری/رمزگشایی Base64 نسبتاً سریع است (میلیونها بایت در ثانیه در CPUهای مدرن)، اما پردازش فایلهای چند مگابایتی در حافظه میتواند باعث انجماد مرورگر شود. برای فایلهای بزرگتر از 1 مگابایت، از رویکردهای استریمینگ یا Web Workers برای جلوگیری از مسدود شدن رشته اصلی استفاده کنید.
آیا میتوانم از Base64 در URLها استفاده کنم؟
به جای Base64 استاندارد، از Base64URL (نسخه امن برای URL) استفاده کنید. کاراکترهای "+" و "/" در Base64 استاندارد در URLها مشکل ایجاد میکنند. کتابخانههایی مانند JWT از Base64URL به طور خودکار استفاده میکنند. برای تبدیل: + را با - جایگزین کنید، / را با _ جایگزین کنید و اختیاراً کاراکترهای پدینگ "=" را حذف کنید.
مراجع و استانداردها
- RFC 4648 - کدگذاریهای داده Base16، Base32 و Base64 - مشخصات رسمی IETF
- RFC 2045 - بخش اول MIME: فرمت بدنه پیامهای اینترنتی - استاندارد کدگذاری MIME و ایمیل
- مستندات وب MDN: btoa() و atob() - مستندات API مرورگر
- RFC 7515 - امضای وب JSON (JWS) - استفاده از Base64URL در توکنهای JWT
- URLs داده W3C - مشخصات URI داده