Работа с Base64 в Python. Кодируем в Base64 и раскодируем обратно

User Rating: 5 / 5

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

Для работы с Base64 в Python используется одноимённый модуль с именем base64.

Сперва вам нужно просто подключить его с помощью оператора import в самом начале вашего Python скрипта/модуля:

import base64

После этого можно использовать доступные функции этого модуля. Давайте перейдем к основному вопросу - как закодировать данные в base64 и раскодировать их? Рассмотрим следующий пример:

if __name__ == '__main__':
    e = base64.b64encode(b'Some text to be encoded into base64!')
    print(f'Закодированный в Base64 bytes-like объект: e = {e}')
    d = base64.b64decode(e)
    print(f'Раскодированный из Base64 bytes-like объект: d = {d}')

    print('-------')
    mystr = 'Python is beautiful and charming!'
    mystr_byt = bytes(mystr, 'utf-8')
    mystr_byt_encoded = base64.b64encode(mystr_byt)
    print(f'Закодированный в Base64 bytes-like объект: mystr_byt_encoded = {mystr_byt_encoded}')
    mystr_byt_decoded = base64.b64decode(mystr_byt_encoded)
    print(f'Раскодированный из Base64 bytes-like объект: mystr_byt_decoded = {mystr_byt_decoded}')
    mystr_decoded = str(mystr_byt_decoded, 'utf-8')
    print(f'Раскодированная Base64 строка: mystr_decoded = {mystr_decoded}')

    print('-------')
    russtr = 'Тестовая строка с кириллицей'
    russtr_byt = bytes(russtr, 'windows-1251')
    russtr_byt_encoded = base64.b64encode(russtr_byt)
    print(f'Закодированный в Base64 bytes-like объект: russtr_byt_encoded = {russtr_byt_encoded}')
    russtr_byt_decoded = base64.b64decode(russtr_byt_encoded)
    print(f'Раскодированный из Base64 bytes-like объект: russtr_byt_decoded = {russtr_byt_decoded}')
    russtr_decoded = str(russtr_byt_decoded, 'windows-1251')
    print(f'Раскодированная Base64 строка: russtr_decoded = {russtr_decoded}')

Как видно из примера, для кодирования в Base64 используется функция b64encode, для обратного декодирования - функция b64decode. На вход функция ожидает так называемый bytes-like object, т.е. объект, который может использоваться для различных операций, работающих с бинарными данными (например, сжатие, сохранение в бинарный файл или отправка через сокет по сети). Для получения такого bytes-like объекта мы используем латинскую букву b перед строкой с нашими данными, поскольку на вход b64encode ожидает именно bytes-like object, а не обычную строку Python. При декодировании также возвращается не строка, а bytes-like объект.

Во второй части скрипта показано, как можно кодировать/декодировать обычную строку Python. Как видим, строка "Python is a beautiful and charming!" преобразуется с помощью встроенной функции bytes к bytes-like объекту. Вторым параметром функции bytes мы указали кодировку 'utf-8' и результат преобразования строки в байты записали в переменную mystr_byt. Уже эта переменная подаётся на вход функции b64encode и мы получаем закодированную строку. Аналогичным образом происходит декодирование - сначала мы получаем в переменную mystr_byt_decoded объект с байтами и уже затем с помощью встроенной функции str преобразуем его в обычную строку mystr_decoded (кодировка также указывается вторым параметром).

В самом конце скрипта также показан пример кодирования/раскодирования строки, содержащей кириллицу. Для разнообразия мы указали кодировку windows-1251, хотя можно было бы и оставить кодировку utf-8.

Если запустить этот скрипт, к примеру в PyCharm, то на экране консоли вы увидите следующий вывод:

Закодированный в Base64 bytes-like объект: e = b'U29tZSB0ZXh0IHRvIGJlIGVuY29kZWQgaW50byBiYXNlNjQh'
Раскодированный из Base64 bytes-like объект: d = b'Some text to be encoded into base64!'
-------
Закодированный в Base64 bytes-like объект: mystr_byt_encoded = b'UHl0aG9uIGlzIGJlYXV0aWZ1bCBhbmQgY2hhcm1pbmch'
Раскодированный из Base64 bytes-like объект: mystr_byt_decoded = b'Python is beautiful and charming!'
Раскодированная Base64 строка: mystr_decoded = Python is beautiful and charming!
-------
Закодированный в Base64 bytes-like объект: russtr_byt_encoded = b'0uXx8u7i4P8g8fLw7urgIPEg6ujw6Ovr6Pbl6Q=='
Раскодированный из Base64 bytes-like объект: russtr_byt_decoded = b'\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xf1\xf2\xf0\xee\xea\xe0 \xf1 \xea\xe8\xf0\xe8\xeb\xeb\xe8\xf6\xe5\xe9'
Раскодированная Base64 строка: russtr_decoded = Тестовая строка с кириллицей

Встроенные в модуль base64 функции позволяют также работать с целыми файлами - например кодировать и декодировать целый файл. Более подробную документацию и описание всех функций модуля вы сможете найти здесь.

Сейчас на сайте

Сейчас на сайте 105 гостей и нет пользователей

Яндекс.Метрика