بیس۶۴

بندانگشتی|فرایند کدبندی base64
**بیس۶۴**  عنوان یک کدبندی دودویی به متن است. در این کدبندی، آرایه‌ای از بایت‌ها به صورت نویسه‌های اَسکی کدگذاری می‌شوند. کاربرد آن در تبادل اطلاعات از طریق محیط‌هایی که تنها از کدهای اسکی ۷-بیتی پشتیبانی می‌کنند (مانند ایمیل) است. توصیف کامل این کدبندی در RFC 1252 آمده است.

## کدبندی
بیس۶۴ را می‌توان یک دستگاه اعداد، مشابه دستگاه اعداد هشت‌هشتی و دستگاه اعداد شانزده‌شانزدهی، اما در مبنای ۶۴ دانست. در حالی که یک سامانهٔ هشت‌هشتی از ۳ بیت، و یک سامانهٔ شانزده‌شانزدهی از ۴ بیت برای ذخیره‌سازی هر رقم استفاده می‌کنند، در مبنای ۶۴ هر رقم در ۶ بیت ذخیره می‌شود. در عمل بیس۶۴ داده‌های دودویی ۸ بیتی را به قالب ۷ بیتی تبدیل می‌کند؛ به طور معمول ۳ بایتِ ۸ بیتی، تبدیل به ۴ بایت ۷ بیتی می‌شوند که ۳۳٪ از داده‌های اولیه حجیم‌تر است. برای نمایش اطلاعات، تنها از نویسه‌های A-Z، a-z، 0-9، / و = (برای پدگذاری) استفاده می‌شود. (هر یک از نتایج ۶ یا ۷ بیتی حاصل بر یکی از نویسه‌های اسکی منطبق خواهد شد)

اگر در پایان متن، کمتر ۲۴ بیت (۳ بایت) برای کدبندی باقی‌مانده باشد، برای ممکن‌شدن کدبندی، به سمت راست بایت‌ها، بیت‌های 0 می‌افزایند، این موضوع با استفاده از نویسهٔ «=» مشخص می‌شود. به عبارت دیگر اگر آخرین گروه داده، تنها دارای ۲ بایت باشد، ۱۲ بیت نخست آن به طور معمول (از روی جدول) کدگذاری می‌شوند و ۴ بیت باقی‌مانده با استفاده از دو بیت 0 کامل می‌گردند تا تبدیل به دادهٔ ۶ بیتی شود، سپس نتیجه را به مبنای ۶۴ می‌برند. برای مشخص‌شدن این موضوع یک علامت «=» به پایان رشتهٔ حاصل افزوده خواهد شد. به طور مشابه اگر در پایان متن تنها ۱ بایت (۸ بیت) باقی‌مانده باشد، ۶ بیت نخست به طور معمول کدبندی می‌شوند، دو بیت پایانی با استفاده از چهار 0 تکمیل می‌گردند، و رشتهٔ حاصل با استفاده از دو علامت «=» نشانه‌گذاری خواهد شد.

## جدول بیس۶۴ استخراج شده از RFC 4648
جدول زیر قسمتی از RFC 4648 §4 است.

### مثال
جمله زیر که در رایانش ابری بسیار معروف است:

پس از کدبندی بیس۶۴ به صورت زیر تغییر خواهد کرد:

در صورتی بخواهیم وارد جزییات تبدیل قسمت اول جمله انگلیسی بالا در بیس۶۴ بشویم باید به جدول زیر مراجعه کنیم. در نقل قول مذکور، کلمه *Man* به *TWFu* تبدیل می شود. در کدبندی اسکی حروف M و a و n به ترتیب دارای شماره شاخصه `77،` `97،` و `110` هستند. این شماره ها در نمایش 8 تایی به صورت بیت های `01001101`, `01100001`, و `01101110` قابل بیان هستند. این سه عدد به هم چسبانده شده و به عدد بزگتر `010011010110000101101110` تبدیل می شود. حال باید شش بیت به شش بیت این عدد را جداسازی کرد.

در تبدیل بیس۶۴ این سه حرف اسکی به چهار نشانه تبدیل می شود که در جدول زیر فابل مشاهده است

اگرتنها دو هشت‌تایی در اختیار داشته باشیم (یعنی 'Ma')، یا اگر آخرین گروه فایل تبدیل شدن، تنها دارای دو دو کاراکتر باشد، تمامی 16 بیت آنها توسط سه نشانه بیس۶۴ آماده تبدیل می شود. دو بیت با کمترین ارزش باقی مانده به طور پیشفرض باید تبدیل به صفر شوند و شش بیتی باقی مانده نیز به = تبدیل می شود.

}
|-
! scope="row" | هشت‌تایی
| colspan="8" | 77 (0x4d)
| colspan="8" | 97 (0x61)
|-
! colspan=2 scope="row" | بیت ها
| 0 || 1 || 0 || 0 || 1 || 1
| 0 || 1 || 0 || 1 || 1 || 0
| 0 || 0 || 0 || 1
| style="background-color:lightblue;" | 0
| style="background-color:lightblue;" | 0
| 
| 
| 
| 
| 
| 
|-
! rowspan=3 scope="row" | کدبندیبیس۶۴
! scope="row" | شش بندی
| colspan="6" | 19
| colspan="6" | 22
| colspan="6" | 4
| colspan="6"   
|- style="font-weight:bold;"
! scope="row" | Character
| colspan="6" | T
| colspan="6" | W
| colspan="6" | E
| colspan="6" | =
|-
! scope="row" | هشت‌تایی
| colspan="6" | 84 (0x54)
| colspan="6" | 87 (0x57)
| colspan="6" | 69 (0x45)
| colspan="6" | 61 (0x3D)
|}
در صورتی که فقط بک کاراکتر 8 بیتی داشته باشیم، یا وقتی که آخرین گروه بندی کاراکترها فقط دارای یک کاراکتر 8 بیتی باشد، این 8 بیت توسط دو دو نشانه بیس۶۴ (برابر با 12 بیت) آماده تبدیل می شوند. چهار بیت با کمترین ارزش باقی مانده به طور پیشفرض باید تبدیل به صفر شوند. در ادامه نیز دو کاراکتر = خواهند آمد. 

}
|-
! scope="row" | Octets
| colspan="8" | 77 (0x4d)
|-
! colspan=2 scope="row" | Bits
| 0 || 1 || 0 || 0 || 1 || 1
| 0 || 1
| style="background-color:lightblue;" | 0
| style="background-color:lightblue;" | 0
| style="background-color:lightblue;" | 0
| style="background-color:lightblue;" | 0

| 
| 
| 
| 
| 
| 

| 
| 
| 
| 
| 
| 
|-
! rowspan=3 scope="row" | کدبندیبیس۶۴
! scope="row" | شش بندی
| colspan="6" | 19
| colspan="6" | 16
| colspan="6"   
| colspan="6"   
|- style="font-weight:bold;"
! scope="row" | کاراکتر
| colspan="6" | T
| colspan="6" | Q
| colspan="6" | =
| colspan="6" | =
|-
! scope="row" | هشت‌تایی
| colspan="6" | 84 (0x54)
| colspan="6" | 81 (0x51)
| colspan="6" | 61 (0x3D)
| colspan="6" | 61 (0x3D)
|}

## کدگشایی
در زمان کدگشایی عکس کارهایی که در زمان کدگذاری انجام شده صورت می‌گیرد. اگر کدگشا به نویسه‌ای بر بخورد که در جدول نویسه‌های بیس۶۴ نباشد، از آن چشم‌پوشی می‌کند. این نویسه‌ها ممکن است نویسه‌های ناموجود در جدول مانند سرخط یا نشانگر خطا در زمان انتقال باشند.

## جستارهای وابسته
* کدبندی نویسه
* یوتی‌اف-۷
* کدبندی درصدی

## منابع

* 
* 
* 
* 
* 

رده:استانداردهای اینترنت
رده:پست الکترونیک
رده:قالب‌های سریال‌سازی داده‌ها
رده:قالب‌های کدبندی دودویی به متن
رده:یوزنت
رده:دستگاه‌های شمارش توان دو