Base64 kodlash qanday ishlaydi

Internet axborot trassasi bo'lsa, unda e-pochtaning yo'llari tor darpadir. Faqat juda kichik aravalar o'tishi mumkin.

E-pochtani tashish tizimi faqat ASCII matn uchun mo'ljallangan. Matnni boshqa tillarga yoki o'zboshimchalik bilan jo'natishga harakat qilish, jarlik orqali yuk mashinasini olish kabi.

Qanday qilib katta yuk mashinasi maysazor orqali o'tadi?

Xo'sh, kichik jarlik orqali katta yuk mashinasini qanday yuborasiz? Ularni bir chetga olib ketishingiz, qismlarni jarlikdan olib o'tishingiz kerak, va boshqa tomondan yuk mashinalari qismlarini qayta qurishingiz kerak.

Fayl eki elektron pochta orqali yuborilganda ham shunday bo'ladi. Ikki tomonlama ma'lumotni kodlash deb nomlanadigan jarayonda ASCII matniga aylantiriladi, u elektron pochta orqali muammosiz ko'chirilishi mumkin. Qabul qiluvchining oxirida ma'lumotlar kodi dekodlanadi va asl fayl qayta tiklanadi.

Oddiy ASCII matn sifatida tasodifiy ma'lumotlarni shifrlashning bir usuli - Base64. MIME standarti tomonidan tekis matndan tashqari ma'lumotlarni yuborish uchun ishlatiladigan usullardan biri.

Base64 qutqarish uchun

Base64 kodlash har biri sakkiz bitdan iborat uchta baytni oladi va ularni ASCII standartidagi to'rtta bosib chiqariladigan belgilar sifatida ifodalaydi. Bu asosan ikki bosqichda amalga oshiriladi.

Birinchi qadam - uch baytni to'rtta oltita bitga aylantirish. ASCII standartidagi har bir belgi etti bitdan iborat. Base64 shifrlangan ma'lumotlarning chop etilishi va inson tomonidan o'qilishi uchun faqat 6 bitni (2 ^ 6 = 64 belgigacha mos keladi) ishlatadi. ASCIIda mavjud bo'lmagan maxsus belgilarning hech biri ishlatilmaydi.

64 ta belgidan (shu sababli Base64 nomi) 10 ta raqam, 26 ta kichik harflar, 26 ta katta harflar va "+" va "/" dir.

Misol uchun, uch bayt 155, 162 va 233 bo'lsa, tegishli (va dahshatli) bit oqimi 100110111010001011101001, bu esa 6-bit qiymatlari 38, 58, 11 va 41 ga to'g'ri keladi.

Ushbu raqamlar Base64 kodlash jadvali yordamida ikkinchi bosqichda ASCII belgilarga aylanadi. Bizning misolimizning 6-bit qiymatlari ASCII "m6Lp" qatoriga tarjima qilinadi.

Ushbu ikki bosqichli jarayon kodlangan baytlarning barcha ketma-ketligiga qo'llaniladi. Kodlangan ma'lumotlarning to'g'ri yozilganligi va har qanday pochta serverining chiziq uzunligi chegarasidan oshmasligini ta'minlash uchun yangi qator belgilar uzunligi 76 belgidan oshmasligi uchun qo'shiladi. Yangi qator belgilar barcha boshqa ma'lumotlar kabi kodlangan.

Endgameni echish

Kodlash jarayoni tugaganidan so'ng, biz muammoga duch kelishimiz mumkin. Agar baytdagi asl ma'lumotlarning hajmi uchtadan ko'p bo'lsa, hamma narsa yaxshi ishlaydi. Agar shunday bo'lmasa, biz bir yoki ikkita 8 bit bayt bilan yakunlanishi mumkin. To'g'ri kodlash uchun bizda faqat uch bayta kerak.

Qaror, 3 baytli guruh yaratish uchun '0' qiymati bilan etarli baytni qo'shish. Bizning qo'shimcha bayt ma'lumotlarimiz bo'lsa, ikkita qo'shimcha bayta qo'shilsa, ikkita bunday qiymat qo'shiladi.

Albatta, ushbu sun'iy izdoshlar '0 ning kodlash jadvali yordamida kodlanishi mumkin emas. Ular 65 belgidan iborat bo'lishi kerak.

Base64 padding belgisi '=' dir. Tabiiyki, bu faqat kodlangan ma'lumotlarning oxirida paydo bo'ladi.

Base64 kodlash jadvali

Qiymat Char Qiymat Char Qiymat Char Qiymat 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 V 38 m 54 2
7 H 23 X 39 n 55 3
8 Men 24 Y 40 u 56 4
9 J 25 Z 41 s 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 v 44 b 60 8
13 N 29 g 45 t 61 9
14 O 30 e 46 u 62 +
15 R. 31 f 47 v 63 /