کدگذاری Base64 فرآیندی است برای تبدیل دادههای باینری به قالب رشته ASCII با تبدیل آن دادههای باینری به یک نمایش کاراکتر ۶ بیتی. روش کدگذاری Base64 زمانی استفاده میشود که دادههای باینری، مانند تصاویر یا ویدیو، از طریق سیستمهایی که برای انتقال دادهها در قالب متن ساده (ASCII) طراحی شدهاند، منتقل میشوند.
چرا از Base64 Encoding استفاده می شود؟
نیاز به رمزگذاری Base64 ناشی از مشکلاتی است که هنگام انتقال رسانه در قالب باینری خام به سیستم های مبتنی بر متن رخ می دهد.
از آنجایی که سیستم های مبتنی بر متن (مانند ایمیل) داده های باینری را به عنوان طیف گسترده ای از کاراکترها، از جمله کاراکترهای دستوری ویژه تفسیر می کنند، بسیاری از داده های باینری که برای انتقال رسانه منتقل می شوند توسط آن سیستم ها اشتباه تفسیر شده و از بین می روند یا خراب می شوند. فرآیند انتقال.
یکی از روشهای رمزگذاری این نوع دادههای باینری به گونهای که از چنین مشکلاتی در انتقال جلوگیری میکند، ارسال آن به صورت متن ASCII ساده در قالب کدگذاری شده Base64 است. این یکی از تکنیکهایی است که توسط استاندارد MIME برای ارسال دادههایی غیر از متن ساده استفاده میشود.
بسیاری از زبان های برنامه نویسی، مانند PHP و Javascript، شامل توابع رمزگذاری و رمزگشایی Base64 هستند تا داده های ارسال شده با استفاده از رمزگذاری Base64 را تفسیر کنند.
Base64 Encoding Logic
کدگذاری Base64 داده های باینری را به بخش های 6 بیتی 3 بایتی کامل تقسیم می کند و آن ها را به عنوان کاراکترهای قابل چاپ در استاندارد ASCII نشان می دهد. این کار را اساساً در دو مرحله انجام می دهد.
اولین قدم این است که رشته باینری را به بلوک های 6 بیتی تقسیم کنید. Base64 فقط از 6 بیت (مرتبط با 2^6=64 کاراکتر) استفاده می کند تا اطمینان حاصل شود که داده های رمزگذاری شده قابل چاپ و خواندن توسط انسان هستند. هیچ یک از کاراکترهای ویژه موجود در ASCII استفاده نمی شود.
64 کاراکتر (از این رو نام Base64) 10 رقم، 26 کاراکتر کوچک، 26 کاراکتر بزرگ و همچنین علامت پلاس (+) و اسلش جلو (/) است. همچنین یک کاراکتر 65 وجود دارد که به عنوان pad شناخته می شود که علامت برابر (=) است. این کاراکتر زمانی استفاده میشود که آخرین بخش دادههای باینری حاوی 6 بیت کامل نباشد.
مثال رمزگذاری Base64
برای مثال، سه عدد اسکی 155، 162، و 233 را در نظر بگیرید. این سه عدد یک جریان باینری از 100110111010001011101001 را تشکیل می دهند. یک فایل باینری، مانند یک تصویر، حاوی یک جریان باینری است که ده ها یا صدها هزار عدد دارد. و یکی.
یک رمزگذار Base64 با تقسیم جریان باینری به گروههای شش کاراکتری شروع میشود: 100110 111010 001011 101001. هر یک از این گروهبندیها به اعداد 38، 58، 11 و41 ترجمه میشوند.
یک جریان دودویی شش کاراکتری، با مجذور کردن هر مقدار نشان داده شده با 1 در دنباله باینری با مربع موقعیت آن، بین نویسه های باینری (یا پایه-2) را به اعشاری (پایه-10) تبدیل می کند.با شروع از سمت راست و حرکت به چپ و شروع با صفر، مقادیر موجود در جریان باینری 2^0، سپس 2^1، سپس 2^2، سپس 2^3، سپس 2^4، سپس 2^5 را نشان می دهند.
در اینجا راه دیگری برای بررسی آن وجود دارد. با شروع از سمت چپ، هر موقعیت ارزش 1، 2، 4، 8، 16 و 32 را دارد. اگر 0 در اسلات داشته باشد، ندارید. رشته باینری 100110 به عدد اعشاری 38 تبدیل می شود: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.
رمزگذاری Base64 این رشته باینری را می گیرد و آن را به مقادیر 6 بیتی 38، 58، 11 و 41 تجزیه می کند.
در نهایت، این اعداد با استفاده از جدول رمزگذاری Base64 به کاراکترهای ASCII تبدیل می شوند. مقادیر 6 بیتی این مثال به دنباله ASCII m6Lp ترجمه می شود.
استفاده از جدول تبدیل Base64:
- 38 m است
- 58 برابر با 6 است
- 11 L است
- 41 p است
این فرآیند دو مرحله ای برای کل رشته باینری که کدگذاری شده است اعمال می شود.
برای اطمینان از اینکه داده های رمزگذاری شده می توانند به درستی چاپ شوند و از محدودیت طول خط سرور پست تجاوز نمی کنند، کاراکترهای خط جدید درج می شوند تا طول خط کمتر از 76 کاراکتر باشد. کاراکترهای خط جدید مانند همه دادههای دیگر کدگذاری میشوند.
کل هدف کدگذاری Base64، از افزودن padding برای حفظ بخش های باینری 3 بایتی تا تبدیل باینری به متن با استفاده از جدول Base64، حفظ یکپارچگی اطلاعات باینری ارسال شده است.
جدول رمزگذاری Base64
جدول زیر تمام 64 کاراکتر استفاده شده در رمزگذاری Base64 را ترجمه می کند.
جدول رمزگذاری Base64 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
ارزش | چارت | ارزش | چارت | ارزش | چارت | ارزش | چارت | |||
0 | A | 16 | Q | 32 | g | 48 | w | |||
1 | B | 17 | R | 33 | h | 49 | x | |||
2 | C | 18 | S | 34 | i | 50 | y | |||
3 | D | 19 | T | 35 | j | 51 | z | |||
4 | E | 20 | U | 36 | k | 52 | 0 | |||
5 | F | 21 | V | 37 | l | 53 | 1 | |||
6 | G | 22 | W | 38 | m | 54 | 2 | |||
7 | H | 23 | X | 39 | 55 | 3 | ||||
8 | I | 24 | Y | 40 | o | 56 | 4 | |||
9 | J | 25 | Z | 41 | p | 57 | 5 | |||
10 | K | 26 | a | 42 | q | 58 | 6 | |||
11 | L | 27 | b | 43 | r | 59 | 7 | |||
12 | M | 28 | c | 44 | s | 60 | 8 | |||
13 | N | 29 | d | 45 | t | 61 | 9 | |||
14 | O | 30 | e | 46 | u | 62 | + | |||
15 | P | 31 | f | 47 | v | 63 | / |
حل پایان بازی
در پایان فرآیند رمزگذاری، ممکن است مشکلی وجود داشته باشد. اگر اندازه داده اصلی در بایت مضرب سه باشد، همه چیز خوب کار می کند. اگر اینطور نیست، ممکن است بایت های خالی وجود داشته باشد. برای رمزگذاری مناسب، دقیقاً 3 بایت داده باینری مورد نیاز است.
راه حل این است که به اندازه کافی بایت با مقدار 0 اضافه کنید تا یک گروه 3 بایتی ایجاد کنید. اگر داده به یک بایت داده اضافی نیاز داشته باشد، دو مقدار اضافه می شود، یکی برای دو بایت اضافی اضافه می شود.
البته، این '0های دنباله دار مصنوعی را نمی توان با استفاده از جدول رمزگذاری زیر کدگذاری کرد. آنها باید با یک شخصیت 65 نشان داده شوند. کاراکتر padding Base64 علامت برابر (=) است و در انتهای داده های رمزگذاری شده قرار می گیرد.