Base64 кодчилол нь хоёртын өгөгдлийг 6 бит тэмдэгтийн дүрслэл болгон хувиргах замаар хоёртын өгөгдлийг ASCII мөр формат руу хөрвүүлэх үйл явц юм. Энгийн текст (ASCII) форматаар өгөгдөл дамжуулахад зориулагдсан системээр зураг эсвэл видео зэрэг хоёртын өгөгдлийг дамжуулахад Base64 кодчиллын аргыг ашигладаг.
Яагаад Base64 кодчилол ашигладаг вэ?
Base64 кодчилолын хэрэгцээ нь зөөвөрлөгчийг эх бичвэрт суурилсан системд хоёртын форматаар дамжуулах үед үүсдэг асуудлаас үүдэлтэй.
Текстэд суурилсан системүүд (и-мэйл гэх мэт) хоёртын өгөгдлийг тусгай тушаалын тэмдэгтүүд зэрэг өргөн хүрээний тэмдэгт болгон тайлбарладаг тул зөөвөрлөгч дамжуулахад дамждаг хоёртын өгөгдлийн ихэнх нь тэдгээр системүүдээр буруу тайлбарлагдаж, алдагдсан эсвэл гэмтсэн байдаг. дамжуулах үйл явц.
Ийм төрлийн дамжуулалтын асуудлаас зайлсхийхийн тулд ийм төрлийн хоёртын өгөгдлийг кодлох нэг арга бол үүнийг Base64 кодлогдсон форматаар энгийн ASCII текст хэлбэрээр илгээх явдал юм. Энэ нь энгийн текстээс өөр өгөгдөл илгээхэд MIME стандартын ашигладаг аргуудын нэг юм.
PHP болон Javascript зэрэг олон програмчлалын хэлүүд нь Base64 кодчилол ашиглан дамжуулагдсан өгөгдлийг тайлбарлахын тулд Base64 кодчилол болон тайлах функцуудыг агуулдаг.
Base64 кодчиллын логик
Base64 кодчилол нь хоёртын өгөгдлийг 3 бүтэн байтын 6 битийн сегментүүдэд хувааж, тэдгээрийг ASCII стандартад хэвлэгдэх тэмдэгт болгон илэрхийлдэг. Үүнийг үндсэндээ хоёр алхамаар хийдэг.
Эхний алхам бол хоёртын мөрийг 6 битийн блок болгон задлах явдал юм. Base64 нь кодлогдсон өгөгдлийг хэвлэх, хүн унших боломжтой болгохын тулд зөвхөн 6 бит (2^6=64 тэмдэгттэй харгалзах) ашигладаг. ASCII дээр байгаа тусгай тэмдэгтүүдийн аль нь ч ашиглагдаагүй.
64 тэмдэгт (иймээс Base64 гэсэн нэр) нь 10 цифр, 26 жижиг үсэг, 26 том үсэг, мөн Нэмэх тэмдэг (+) болон Урд налуу зураас (/) байна. Мөн pad гэж нэрлэгддэг 65 дахь тэмдэгт байдаг бөгөөд энэ нь Тэгш тэмдэг (=). Хоёртын өгөгдлийн сүүлийн сегмент бүтэн 6 бит агуулаагүй тохиолдолд энэ тэмдэгтийг ашиглана.
Base64 кодчиллын жишээ
Жишээ нь, 155, 162, 233 гэсэн гурван ASCII тоог ав. Эдгээр гурван тоо нь 100110111010001011101001 гэсэн хоёртын урсгалыг бүрдүүлдэг. Зураг шиг хоёртын файл нь хэдэн арван эсвэл хэдэн зуун zero-ийн хоёртын урсгалыг агуулна. болон нэг.
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 гэсэн утгатай. Хэрэв хоёртын тоо нь үүрэнд 1-тэй байвал та тэр утгыг нэмнэ; Хэрэв энэ нь үүрэнд 0-тэй бол та байхгүй. Хоёртын тоо 100110 нь аравтын бутархайн тоо 38 руу хувирдаг: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.
Base64 кодчилол нь энэ хоёртын мөрийг авч, 38, 58, 11, 41 гэсэн 6 битийн утгууд болгон задалдаг.
Эцэст нь эдгээр тоонууд нь Base64 кодчилолын хүснэгтийг ашиглан ASCII тэмдэгтүүд рүү хөрвүүлэгддэг. Энэ жишээний 6 битийн утгууд нь m6Lp ASCII дараалал руу хөрвүүлнэ.
Base64 хөрвүүлэх хүснэгтийг ашиглах:
- 38 нь m
- 58 бол 6
- 11 нь L
- 41 бол p
Энэ хоёр үе шаттай процесс нь кодлогдсон бүхэл бүтэн хоёртын мөрт хэрэглэгдэх болно.
Шифрлэгдсэн өгөгдлийг зөв хэвлэж, ямар ч имэйл серверийн мөрийн уртын хязгаараас хэтрүүлэхгүйн тулд мөрийн уртыг 76 тэмдэгтээс доош байлгах үүднээс шинэ мөрийн тэмдэгтүүдийг оруулсан болно. Шинэ мөрийн тэмдэгтүүд бусад бүх өгөгдлийн адил кодлогдсон байна.
Base64 кодчиллын бүх зорилго нь 3 байт хоёртын сегментийг хадгалахын тулд дэвсгэр нэмэхээс эхлээд Base64 хүснэгтийг ашиглан хоёртын файлыг текст рүү хөрвүүлэх хүртэлх бүх зорилго нь дамжуулагдсан хоёртын мэдээллийн бүрэн бүтэн байдлыг хадгалах явдал юм.
Base64 кодчиллын хүснэгт
Дараах хүснэгтэд Base64 кодчилолд ашигласан бүх 64 тэмдэгтийг орчуулсан болно.
Base64 кодчиллын хүснэгт | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Утга | Char | Утга | Char | Утга | Char | Утга | Char | |||
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 | Би | 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 байт хоёртын өгөгдөл шаардлагатай.
Шийдлийн шийдэл нь 3 байт бүлэг үүсгэхийн тулд 0 утгатай хангалттай байт нэмэх явдал юм. Хэрэв өгөгдөлд нэг байт нэмэлт өгөгдөл шаардлагатай бол ийм хоёр утгыг хавсаргана, хоёр нэмэлт байтад нэгийг нэмнэ.
Мэдээжийн хэрэг, эдгээр хиймэл арын '0-ийг доорх кодчилолын хүснэгтийг ашиглан кодлох боломжгүй. Тэдгээрийг 65 дахь тэмдэгтээр төлөөлөх ёстой. Base64 бөглөх тэмдэгт нь Тэгш тэмдэг (=) бөгөөд кодлогдсон өгөгдлийн төгсгөлд байрлана.