UltKit

رمزگذاری و رمزگشایی Base64

متن یا فایل را به Base64 تبدیل کنید یا Base64 را به متن خوانا برگردانید. یونیکد به‌درستی پردازش می‌شود، الفبای URL-safe با یک کلیک در دسترس است و رمزگشایی هر دو الفبا را، با پدینگ یا بدون آن، می‌پذیرد.

حالت

۰ نویسه · ۰ واژه · ۰ خط

۰ نویسه · ۰ واژه · ۰ خط

کاملاً در همین زبانهٔ مرورگر اجرا می‌شود. متن شما هرگز آپلود یا ذخیره نمی‌شود.

الفبای Base64

اندیس ← نویسه طبق RFC 4648. دو مورد آخرِ هایلایت‌شده در نسخهٔ امن برای URL فرق دارند: 62 برابر + یا - و 63 برابر / یا _ است.

  1. 0A
  2. 1B
  3. 2C
  4. 3D
  5. 4E
  6. 5F
  7. 6G
  8. 7H
  9. 8I
  10. 9J
  11. 10K
  12. 11L
  13. 12M
  14. 13N
  15. 14O
  16. 15P
  17. 16Q
  18. 17R
  19. 18S
  20. 19T
  21. 20U
  22. 21V
  23. 22W
  24. 23X
  25. 24Y
  26. 25Z
  27. 26a
  28. 27b
  29. 28c
  30. 29d
  31. 30e
  32. 31f
  33. 32g
  34. 33h
  35. 34i
  36. 35j
  37. 36k
  38. 37l
  39. 38m
  40. 39n
  41. 40o
  42. 41p
  43. 42q
  44. 43r
  45. 44s
  46. 45t
  47. 46u
  48. 47v
  49. 48w
  50. 49x
  51. 50y
  52. 51z
  53. 520
  54. 531
  55. 542
  56. 553
  57. 564
  58. 575
  59. 586
  60. 597
  61. 608
  62. 619
  63. 62+ -
  64. 63/ _

طول خروجی چقدر می‌شود

هر 3 بایت ورودی به 4 نویسه تبدیل می‌شود؛ گروه آخر با 1 یا 2 بایت در Base64 استاندارد با = پر می‌شود و در شکل امن برای URL بدون padding می‌ماند.

ورودیبایتاستانداردامن برای URLطول
U1VQ==VQ4
Ul2VWw=VWw4
Ult3VWx0VWx04
UltK4VWx0Sw==VWx0Sw8
UltKi5VWx0S2k=VWx0S2k8
UltKit6VWx0S2l0VWx0S2l08

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 در نشانی‌ها و نام فایل‌ها جا شود.