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

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

Транспортната система за електронна поща е предназначена само за обикновен ASCII текст. Опитвайки се да изпращате текст на други езици или произволни файлове, е като да получите камион през дерето.

Как се движи големият камион през укреплението?

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

Същото се случва, когато изпратите прикачен файл чрез имейл . В процес, известен като кодиране на двоичните данни, се трансформира в ASCII текст, който може да бъде транспортиран по имейл без проблеми. В края на получателя данните се декодират и оригиналът се възстановява.

Един метод за кодиране на произволни данни като обикновен ASCII текст е Base64. Това е една от техниките, използвани от стандарта MIME за изпращане на данни, различни от обикновен текст .

Base64 за спасяването

Кодирането на Base64 отнема три байта, всеки от които се състои от осем бита, и ги представя като четири печатни знака в ASCII стандарта. Той прави това по същество на две стъпки.

Първата стъпка е да преобразувате три байта до четири числа от шест бита. Всеки знак в стандарта ASCII се състои от седем бита. Base64 използва само 6 бита (съответстващи на 2 ^ 6 = 64 символа), за да гарантира, че кодираните данни могат да се разпечатват и да се четат от човек. Нито един от специалните символи, налични в ASCII, не се използва.

64-те знака (оттук името Base64) са 10 цифри, 26 малки букви, 26 главни знака, както и "+" и "/".

Ако например трите байта са 155, 162 и 233, съответният (и плашещ) битов поток е 100110111010001011101001, което на свой ред съответства на 6-битовите стойности 38, 58, 11 и 41.

Тези цифри се преобразуват във вид на ASCII символи във втората стъпка, като се използва таблицата за кодиране Base64. 6-битовите стойности на нашия пример се превеждат към последователността ASCII "m6Lp".

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

Решаване на крайната игра

В края на процеса на кодиране може да попаднем на проблем. Ако размерът на оригиналните данни в байтове е трикратно, всичко работи добре. Ако не е така, може да завършим с един или два 8-битови байта. За правилното кодиране обаче имаме нужда от точно три байта.

Решението е да добавите достатъчно байтове със стойност "0", за да създадете група с 3 байта. Две такива стойности се добавят, ако имаме един допълнителен байт данни, един е добавен за два допълнителни байта.

Разбира се, тези изкуствени последни "0" не могат да бъдат кодирани, използвайки таблицата за кодиране по-долу. Те трябва да бъдат представени от 65-и знак.

Базовият знак Base64 е '='. Естествено, тя може да се появи само в края на кодираните данни.

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

стойност овъглявам стойност овъглявам стойност овъглявам стойност овъглявам
0 А 16 Q 32 г 48 w
1 B 17 R 33 з 49 х
2 ° С 18 С 34 аз 50 ш
3 д 19 T 35 к 51 Z
4 E 20 U 36 к 52 0
5 F 21 V 37 л 53 1
6 G 22 W 38 m 54 2
7 Н 23 х 39 п 55 3
8 аз 24 Y 40 о 56 4
9 J 25 Z 41 р 57 5
10 K 26 а 42 р 58 6
11 L 27 б 43 R 59 7
12 М 28 ° С 44 с 60 8
13 N 29 д 45 T 61 9
14 О 30 д 46 ф 62 +
15 P 31 е 47 V 63 /