Баннер мобильный (3) Пройти тест

Что такое кодировка Base64 и как она работает

Закодируем все что угодно

Разбор

2 декабря 2025

Поделиться

Скопировано
Что такое кодировка Base64 и как она работает

Содержание

    Рассказываем, что такое кодировка Base64, как она работает, для чего применяется, на примере популярных языков программирования.

    Что такое кодировка Base64 и зачем она нужна

    Кодировка Base64 — это один из способов представления данных. А именно — это способ кодирования двоичных данных в виде текста. Для текста используются символы из набора ASCII. Сама идея такого кодирования довольно проста: любая информация в компьютере (изображение, текст и тому подобное) — это набор единиц и нулей, то есть двоичный код. Этот код нужно разделить на блоки и представить в виде символов. Каждый блок из трех байтов (24 бита) преобразуется в четыре символа ASCII.

    Такой метод кодирования позволяет передавать информацию по тем каналам, которые не предназначены для передачи двоичных данных. Следует понимать, что это не шифрование и такой способ кодирования никак не обеспечивает безопасность данных, так как легко декодируется.

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

    Для начала нужно представить данные в байтовом виде. Это значит, что необходимо из двоичных данных получить группы, состоящие из восьми бит. Для примера возьмем слово dog. Оно состоит из трех букв. В полной таблице ASCII содержатся 128 символов, и каждому символу соответствует свой номер от 0 до 127. В нашем случае номера следующие:

    d — 100

    o — 111

    g — 103

    В байтовом виде эти номера будут выглядеть так:

    100 — 01100100

    111 — 01101111

    103 — 01100111

    В итоге получаем вот такую строку из трех байтов:

    01100100 01101111 01100111

    Теперь из этих байтов надо получить группы по шесть бит. Зачем это делать? Все из-за того, что таблица символов ASCII для кодирования в формате Base64 состоит всего из 64 символов, так как число 64 — это количество всех возможных перестановок 0 и 1 в группе из шести бит. Вот так выглядит эта таблица:

    IndexBinaryChar.IndexBinaryChar.IndexBinaryChar.IndexBinaryChar.
    0000000A16010000Q32100000g48110000w
    1000001B17010001R33100001h49110001x
    2000010C18010010S34100010i50110010y
    3000011D19010011T35100011j51110011z
    4000100E20010100U36100100k521101000
    5000101F21010101V37100101l531101011
    6000110G22010110W38100110m541101102
    7000111H23010111X39100111n551101113
    8001000I24011000Y40101000o561110004
    9001001J25011001Z41101001p571110015
    10001010K26011010a42101010q581110106
    11001011L27011011b43101011r591110117
    12001100M28011100c44101100s601111008
    13001101N29011101d45101101t611111019
    14001110O30011110e46101110u62111110+
    15001111P31011111f47101111v63111111/

    Итак, после разбиения трех байтов на группы по шесть бит получим уже такую строку:

    011001 000110 111101 100111

    Получили четыре группы по шесть бит каждая. Каждой такой группе соответствует свой номер от 0 до 63:

    011001 — 25

    000110 — 6

    111101 — 61

    100111 — 39

    А каждому номеру соответствует свой символ:

    25 — Z

    6 — G

    61 — 9

    39 — n

    То есть в итоге получается, что слово dog в кодировке Base64 представляется в виде набора символов ZG9n. Вроде все просто. Но, как всегда, есть один нюанс. Дело в том, что далеко не всегда биты могут делиться нацело на группы по шесть бит. Что тогда делать? В этом случае просто добавляются так называемые пустые байты. Например, если дан такой байт:

    01100100

    То, чтобы все удачно разделилось на группы, прибавляем к нему два пустых байта:

    01100100 00000000 00000000

    Далее эти пустые байты превратятся в символ «равно».

    Где применяется Base64

    Кодировку Base64 с успехом применяют в электронной почте. С ее помощью кодируют вложения в электронных письмах, так как протокол SMTP, через который передают письма, поддерживает только текстовый формат.

    Также эту кодировку используют в веб-разработке. Вот так, например, можно отобразить на странице изображение с зеленым квадратом:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Display Image</title>
      </head>
      <body>
        <h1>Зеленый квадрат</h1>
        <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAABHNCSVQICAgIfAhkiAAAA/JJREFUeJzt1EENwCAAwMAxS7jDJYqYhf1IkzsFfXXMvc4DEPDeDgD4y7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyDAvIMCwgw7CADMMCMgwLyDAsIMOwgAzDAjIMC8gwLCDDsIAMwwIyPgizBNVa2blRAAAAAElFTkSuQmCC'/>
      </body>
    </html>

    Тут все просто: в элементе img для его атрибута src в качестве значения прописываем закодированное в формате Base64 изображение. В браузере этот код будет выглядеть примерно так:

    Зеленый квадрат в Base64

    Также Base64 нашел применение в электронных книгах. Есть довольно популярный формат электронных книг — fb2. Он представляет из себя простую XML-разметку со специальными тегами, и все изображения в нем хранятся именно в виде Base64. Для этого существует элемент binary:

    <binary id="green.png" content-type="image/png">
        <!--Данные в формате Base64-->
     </binary>

    Для каждого такого элемента указывается идентификатор (id) и тип контента (content-type). Содержимое binary может быть отображено в любом месте книги в уже раскодированном виде. Для этого надо только лишь прописать в нужном месте элемент image и в нем указать идентификатор в виде значения для атрибута href:

    <image l:href="#green.png"/>

    Помимо этого, кодировку Base64 применяют также в базах данных для хранения информации и в QR-кодах.

    Base64 в программировании

    Рассмотрим, как можно кодировать и декодировать информацию при помощи Base64 на популярных языках Python, Java и JavaScript.

    Base64 в Python

    Прежде всего в самом начале исходника необходимо прописать следующий импорт модуля base64:

    import base64

    Далее создаем переменную со строкой, которую будем кодировать:

    text = "Skillfactory"

    На следующем шаге применяем функцию b64encode из импортированного модуля base64:

    encoded_text = base64.b64encode(text.encode("utf-8")).decode("utf-8")

    В переменной encoded_text будет содержаться готовый результат кодирования. Отобразим его в консоли при помощи print:

    print(encoded_text)

    Весь исходник будет таким:

    import base64
    
    text = "Skillfactory"
    encoded_text = base64.b64encode(text.encode("utf-8")).decode("utf-8")
    print(encoded_text)

    В консоли получим такую строку:

    U2tpbGxmYWN0b3J5

    А теперь раскодируем ее. Для этого вместо функции b64encode применим функцию b64decode:

    import base64
    
    encoded_text = "U2tpbGxmYWN0b3J5"
    decoded_text = base64.b64decode(encoded_text).decode("utf-8")
    print(decoded_text)

    Результат:

    Skillfactory

    Base64 в Java

    Здесь так же, как и в прошлом примере, надо произвести импорт. Импортируем класс Base64:

    import java.util.Base64;

    Дальше в главном методе main создаем объект encoder:

    Base64.Encoder encoder = Base64.getEncoder();

    Сразу после этого создаем строку для кодирования:

    String str = "Java";

    Теперь осталось только ее закодировать и вывести результат в консоль. Для кодировки вызываем метод encodeToString для объекта encoder:

    String encodedString = encoder.encodeToString(str.getBytes());

    Выводим в консоль переменную encodedString, в которой содержится закодированная строка:

    System.out.println(encodedString);

    Весь исходный код программы:

    import java.util.Base64;
    
    public class Main {
        public static void main(String[] args) {
            Base64.Encoder encoder = Base64.getEncoder();
            String str = "Java";
            String encodedString = encoder.encodeToString(str.getBytes());
    
            System.out.println(encodedString);
        }
    }

    Результат работы программы:

    SmF2YQ==

    Для раскодирования нам понадобится объект decoder из соответствующего класса. И вызывать для этого объекта нужно метод decode. В общем, код будет такой:

    import java.util.Base64;
    
    public class Main {
        public static void main(String[] args) {
            Base64.Decoder decoder = Base64.getDecoder();
            String encodedString = "SmF2YQ==";
            byte[] bytes = decoder.decode(encodedString);
    
            System.out.println(new String(bytes));
        }
    }

    Вывод в консоли:

    Java

    Base64 в JavaScript

    В JavaScript для кодирования применяется функция btoa:

    let string = 'Base64';
    let encodedString = btoa(string);
    console.log(encodedString);

    В консоли получим строку:

    QmFzZTY0

    А для декодирования используется функция atob:

    let encodedString = 'QmFzZTY0'
    let decodedString = atob(encodedString);
    console.log(decodedString);

    Результат:

    Base64

    Инструменты для кодирования и декодирования в формате Base64

    Существуют удобные инструменты для работы с кодировкой Base64. Например, в UNIX-подобных системах можно закодировать и раскодировать строку, используя простые консольные команды. С помощью такой команды можно закодировать строку «Добро пожаловать!»:

    echo Добро пожаловать! | base64

    Результат выполнения команды:

    0JTQvtCx0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCEK

    А раскодировать ее можно так:

    echo 0JTQvtCx0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCEK | base64 --decode

    Получим:

    Добро пожаловать!

    Среди онлайн-инструментов имеется вот такой простенький сайт с очень минималистичным дизайном:

    Простой онлайн-декодировщик Base64

    Если нужен чуть больший функционал, то можно использовать этот сайт. Выглядит он так:

    Кодировщик Base64 DenCode

    Пробуем кодировать: задание для практики

    Ранее мы показали, как закодировать строку. Теперь, действуя в обратном порядке, попробуйте раскодировать следующую строчку:

    Q29kZQ==

    Для получения соответствующих символов можно использовать эту таблицу.

    Решение

    Сначала получаем шестибитовые группы по приведенной в статье таблице:

    Q — 010000

    2 — 110110

    9 — 111101

    k — 100100

    Z — 011001

    Q — 010000

    Далее идут пустые байты. Они нам не нужны. Из полученных групп формируем байты, то есть группы из восьми бит. Просто отсчитываем слева направо по 8 бит. Получится 4 байта:

    01000011 01101111 01100100 01100101

    Последние четыре ноля у символа Q входят в первый пустой байт. Их просто отбрасываем. Теперь, пользуясь таблицей из вышеприведенной ссылки, находим соответствующие символы:

    01000011 — C

    01101111 — o

    01100100 — d

    01100101 — e

    То есть в итоге получаем слово Code.

    (Конец решения)

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии