رمزگذاری و رمزگشایی Base64
متن یا فایل را به Base64 تبدیل کنید یا Base64 را به متن خوانا برگردانید. یونیکد بهدرستی پردازش میشود، الفبای URL-safe با یک کلیک در دسترس است و رمزگشایی هر دو الفبا را، با پدینگ یا بدون آن، میپذیرد.
۰ نویسه · ۰ واژه · ۰ خط
۰ نویسه · ۰ واژه · ۰ خط
کاملاً در همین زبانهٔ مرورگر اجرا میشود. متن شما هرگز آپلود یا ذخیره نمیشود.
الفبای Base64
اندیس ← نویسه طبق RFC 4648. دو مورد آخرِ هایلایتشده در نسخهٔ امن برای URL فرق دارند: 62 برابر + یا - و 63 برابر / یا _ است.
- 0A
- 1B
- 2C
- 3D
- 4E
- 5F
- 6G
- 7H
- 8I
- 9J
- 10K
- 11L
- 12M
- 13N
- 14O
- 15P
- 16Q
- 17R
- 18S
- 19T
- 20U
- 21V
- 22W
- 23X
- 24Y
- 25Z
- 26a
- 27b
- 28c
- 29d
- 30e
- 31f
- 32g
- 33h
- 34i
- 35j
- 36k
- 37l
- 38m
- 39n
- 40o
- 41p
- 42q
- 43r
- 44s
- 45t
- 46u
- 47v
- 48w
- 49x
- 50y
- 51z
- 520
- 531
- 542
- 553
- 564
- 575
- 586
- 597
- 608
- 619
- 62+ -
- 63/ _
طول خروجی چقدر میشود
هر 3 بایت ورودی به 4 نویسه تبدیل میشود؛ گروه آخر با 1 یا 2 بایت در Base64 استاندارد با = پر میشود و در شکل امن برای URL بدون padding میماند.
| ورودی | بایت | استاندارد | امن برای URL | طول |
|---|---|---|---|---|
U | 1 | VQ== | VQ | 4 |
Ul | 2 | VWw= | VWw | 4 |
Ult | 3 | VWx0 | VWx0 | 4 |
UltK | 4 | VWx0Sw== | VWx0Sw | 8 |
UltKi | 5 | VWx0S2k= | VWx0S2k | 8 |
UltKit | 6 | VWx0S2l0 | VWx0S2l0 | 8 |
Base64 چه کاری انجام میدهد
Base64 که در RFC 4648 تعریف شده است، بایتهای دلخواه را با ۶۴ نویسهٔ قابلچاپ ASCII مینویسد: A–Z، a–z، 0–9، + و /. هر گروه سهبایتی (۲۴ بیت) به چهار عدد ۶ بیتی تقسیم میشود و هر عدد یک نویسه از این الفبا را انتخاب میکند. اگر طول ورودی مضرب سه نباشد، گروه آخر با یک یا دو علامت = پر میشود. خروجی همیشه حدود ۳۳٪ از ورودی بزرگتر است: ۴ نویسه به ازای هر ۳ بایت.
دلیل وجود آن این است که بسیاری از کانالها برای متن ساخته شدهاند. ایمیل (MIME)، نشانیهای data: در HTML و CSS، فیلدهای JSON که تصویر یا گواهی حمل میکنند و سرآیندهای احراز هویت HTTP Basic همگی برای انتقال امن دادههای باینری از Base64 استفاده میکنند. این روش رمزنگاری نیست و چیزی را پنهان نمیکند؛ برای رمزگشایی به کلید نیازی نیست.
یونیکد و نسخهٔ URL-safe
Base64 بایتها را کدگذاری میکند، نه حروف را، بنابراین متن باید ابتدا به بایت تبدیل شود. این ابزار همیشه از UTF-8 استفاده میکند، کدگذاریای که وب بر پایهٔ آن کار میکند: «é» دو بایت و یک ایموجی چهار بایت میشود. تابع داخلی btoa مرورگر بهتنهایی برای هر نویسهای بالاتر از U+00FF خطا میدهد؛ به همین دلیل کدگذارهای ساده روی حروف دارای اعراب و ایموجی شکست میخورند. در اینجا متن ابتدا از TextEncoder میگذرد و در رمزگشایی، TextDecoder آن را برمیگرداند. اگر بایتهای رمزگشاییشده UTF-8 معتبر نباشند (مثلاً تصویر یا فایل zip)، ابزار بهجای متن درهمریخته آنها را بهصورت هگزادسیمال نشان میدهد.
Base64 استاندارد از + و / استفاده میکند که در نشانیهای اینترنتی و نام فایلها معنای خاصی دارند. الفبای ایمن برای URL در بخش ۵ از RFC 4648 آنها را با - و _ جایگزین میکند و معمولاً پدینگ حذف میشود. JSON Web Tokenها دقیقاً از همین شکل استفاده میکنند. رمزگشا هر دو الفبا و پدینگ ناقص را میپذیرد، پس میتوانید هر کدام را جایگذاری کنید.
رمزگذاری فایلها و تصاویر
یک فایل انتخاب کنید؛ ابزار آن را بهصورت محلی با FileReader میخواند و Base64 آن یا یک نشانی کامل data: همراه با نوع MIME فایل را برمیگرداند که آمادهٔ قرار گرفتن در تگ img یا پسزمینهٔ CSS است. تصاویر درونخطی یک درخواست HTTP را صرفهجویی میکنند، اما یکسوم بزرگتر میشوند و جداگانه کش نمیشوند، پس برای آیکونهای کوچک مناسباند، نه عکس. برای تصاویر با پیشنمایش و قطعهکدهای آمادهٔ HTML و CSS از تبدیل عکس به Base64 استفاده کنید.
پرسشهای متداول
- چرا خروجی Base64 از ورودی من طولانیتر است؟
- هر ۳ بایت به ۴ نویسه تبدیل میشود، پس خروجی حدود ۴/۳ اندازهٔ ورودی است، بهعلاوهٔ حداکثر دو نویسهٔ پدینگ. متن غیر ASCII باز هم بلندتر میشود، چون UTF-8 برای هر نویسه دو تا چهار بایت به کار میبرد.
- علامتهای = در انتها چه هستند؟
- پدینگ هستند. وقتی طول ورودی مضرب سه نباشد، طول خروجی را مضرب چهار میکنند. یک = یعنی گروه آخر دو بایت داشته و دو = یعنی یک بایت داشته است.
- چرا رمزگشایی با خطای «نویسهٔ نامعتبر» شکست میخورد؟
- ورودی چیزی خارج از الفبا دارد، مثل فاصله در وسط یک کلمه، گیومه یا علامت % از کدگذاری URL. خط جدید و پدینگ ناقص پذیرفته میشود، اما نویسههای دیگر نه.
- آیا رمزگذاری Base64 برای رمز عبور امن است؟
- Base64 هیچ محافظتی ایجاد نمیکند. احراز هویت HTTP Basic عبارت user:password را با Base64 میفرستد و به همین دلیل فقط باید روی HTTPS استفاده شود. برای محافظت از اطلاعات محرمانه از رمزنگاری یا هش واقعی استفاده کنید.
- تفاوت Base64 و Base64url چیست؟
- فقط دو نویسه و پدینگ: Base64url بهجای + و / از - و _ استفاده میکند و معمولاً = را حذف میکند، تا نتیجه بدون نیاز به escape در نشانیها و نام فایلها جا شود.