Skip to main content

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

Демонстрации с роботи финч в библиотека „Искра“ (Април 2025)

Демонстрации с роботи финч в библиотека „Искра“ (Април 2025)
Anonim

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

Транспортната система за електронна поща е предназначена само за обикновен 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".

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 -> m
  • 58 -> 6
  • 11 -> L
  • 41 -> стр

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

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

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

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

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

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

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

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