Как работи кодирането Base64

Съдържание:

Как работи кодирането Base64
Как работи кодирането Base64
Anonim

Base64 кодирането е процес на преобразуване на двоични данни във формат ASCII низ чрез преобразуване на тези двоични данни в 6-битово символно представяне. Методът за кодиране Base64 се използва, когато двоични данни, като изображения или видео, се предават през системи, които са проектирани да предават данни в обикновен текстов (ASCII) формат.

Защо се използва кодирането Base64?

Необходимостта от кодиране Base64 идва от проблемите, които възникват, когато медиите се предават в необработен двоичен формат към текстови системи.

Тъй като текстово-базираните системи (като имейл) интерпретират двоичните данни като широк набор от знаци, включително специални командни знаци, голяма част от двоичните данни, които се предават към носителя за прехвърляне, се интерпретират погрешно от тези системи и се губят или повреждат в процеса на предаване.

Image
Image

Един метод за кодиране на този вид двоични данни по начин, който избягва подобни проблеми с предаването, е изпращането им като обикновен 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-ти знак, известен като подложка, който е знакът за равенство (=). Този знак се използва, когато последният сегмент от двоични данни не съдържа цели 6 бита.

Пример за кодиране Base64

Например вземете три ASCII числа 155, 162 и 233. Тези три числа представляват двоичен поток от 100110111010001011101001. Двоичен файл, като изображение, съдържа двоичен поток, работещ за десетки или стотици хиляди нули и единици.

Кодерът Base64 започва с разделяне на двоичния поток на групи от шест знака: 100110 111010 001011 101001. Всяко от тези групи се превежда в числата 38, 58, 11 и 41.

Двоичен поток от шест знака преобразува между двоични (или основа-2) в десетични (основа-10) знаци чрез квадратиране на всяка стойност, представена от 1 в двоичната последователност, с нейния позиционен квадрат. Започвайки от дясно и движейки се наляво и започвайки с нула, стойностите в двоичния поток представляват 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 взема този двоичен низ и го разделя на 6-битови стойности 38, 58, 11 и 41.

Накрая, тези числа се преобразуват в ASCII символи с помощта на таблицата за кодиране Base64. 6-битовите стойности на този пример се преобразуват в ASCII последователността m6Lp.

Използване на таблицата за преобразуване Base64:

  • 38 е m
  • 58 е 6
  • 11 е L
  • 41 е p

Този процес в две стъпки се прилага към целия двоичен низ, който е кодиран.

За да се гарантира, че кодираните данни могат да бъдат правилно отпечатани и не надвишават ограничението за дължина на реда на който и да е пощенски сървър, се вмъкват знаци за нов ред, за да се поддържа дължината на реда под 76 знака. Знаците за нов ред са кодирани като всички други данни.

Цялата цел на кодирането Base64, от добавяне на подложка за запазване на 3-байтови двоични сегменти до конвертиране на двоичен код в текст с помощта на таблицата Base64, е да се запази целостта на предадената двоична информация.

Таблица за кодиране Base64

Следната таблица превежда всички 64 знака, използвани в кодирането Base64.

Таблица за кодиране 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 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-ти знак. Подпълващият знак Base64 е знакът за равенство (=) и се поставя в края на кодираните данни.

Препоръчано: