Base64 и другие кодировки в SQLite

Вы, возможно, слышали о шестнадцатеричном кодировании в SQLite:

select hex('hello');
-- 68656C6C6F

select unhex('68656C6C6F');
-- hello

По умолчанию SQLite не поддерживает другие алгоритмы кодирования данных. Но вы легко можете включить их с помощью расширения sqlean-crypto (с криптовалютами никак не связано).

Примечание. В отличие от других СУБД, добавить расширение в SQLite элементарно. Скачиваете файл, выполняете одну команду — и готово.

sqlean-crypto добавляет две функции:

  • encode(data, algo) кодирует бинарные данные в текст по указанному алгоритму.
  • decode(text, algo) декодирует текст в бинарные данные по указанному алгоритму.

Поддерживет алгоритмы base32, base64, base85, hex и url.

Base32 использует 32 человекочитаемых символа:

select encode('hello', 'base32');
-- NBSWY3DP

select decode('NBSWY3DP', 'base32');
-- hello

Base64 использует 64 печатных символа:

select encode('hello', 'base64');
-- aGVsbG8=

select decode('aGVsbG8=', 'base64');
-- hello

Base85 (он же Ascii85) использует 85 печатных символов:

select encode('hello', 'base85');
-- BOu!rDZ

select decode('BOu!rDZ', 'base85');
-- hello

Шестнадцатеричное кодирование использует 16 символов (0-9 и A-F):

select encode('hello', 'hex');
-- 68656c6c6f

select decode('68656c6c6f', 'hex');
-- hello

URL-кодирование заменяет некоторые символы на последовательности, которые безопасно использовать в URL-адресах:

select encode('hel lo!', 'url');
-- hel%20lo%21

select decode('hel%20lo%21', 'url');
-- hel lo!

Такого набора алгоритмов хватит на все случаи жизни.

Установка

  1. Скачайте свежий релиз

  2. Подключите в командной строке SQLite (sqlite.exe):

sqlite> .load ./crypto
sqlite> select encode('hello', 'base64');

Как установить расширение для IDE, Python и других сценариев.

Документация расширения с подробным описанием.

Подписывайтесь на канал, чтобы не пропустить новые заметки 🚀