Как сгенерировать секретный ключ: HEX, URL-safe и Fernet в GLYPH
Содержание
В настройках приложения написано: «Укажите секретный ключ». Какой именно — думайте сами. Вы открываете генератор, получаете красивую длинную строку, вставляете. Приложение недовольно.
Оказывается, нужны 32 байта в определённой кодировке. А вы принесли 32 символа с цифрой и восклицательным знаком. Вроде старались, но на входе опять не пустили.
В GLYPH для этого есть отдельные режимы HEX, URL-safe и Fernet. Разберёмся, какой выбирать и почему длинная строка сама по себе ещё ничего не гарантирует.
Это точно ключ, который можно создать самому?
Сначала проверьте документацию своего приложения. Иногда нужен случайный секрет, который вы назначаете сами. А иногда — API-ключ, который обязан выдать сторонний сервис.
Сгенерировать случайную строку и получить действующий ключ чужого облачного сервиса — разные вещи. Второе через GLYPH не делается. Было бы удобно, конечно, но бухгалтерия облачного сервиса вряд ли оценила бы такую находку.
Дальше речь про секреты для ваших приложений и поддерживаемых ими форматов.
Байты и символы не одно и то же
Исходные случайные байты можно записать разными алфавитами. От этого меняется длина текста, но не количество случайных данных.
| Режим | Представление | Результат для 32 байтов |
|---|---|---|
| HEX | Шестнадцатеричная строка | 64 символа |
| URL-safe | Base64url без дополнения | 43 символа |
| Fernet | Формат ключа Fernet | 44 символа с = |
Поэтому требование «длина 32» без единиц нужно уточнить. Строку из 32 букв нельзя автоматически считать ключом из 32 случайных байтов.
HEX: когда нужны цифры и a–f
В GLYPH выберите HEX, задайте количество байтов и нажмите «Создать». На каждый байт получается два символа: 0–9 и a–f.
Такой формат подходит, если принимающий код ожидает именно шестнадцатеричную строку. Если ему нужны исходные байты, их нужно правильно декодировать. HEX — запись данных текстом, собственного шифрования тут не происходит.
Программные эквиваленты для самостоятельной генерации: secrets.token_hex(32) в Python или openssl rand -hex 32. Каждый запуск создаёт новый результат.
URL-safe: компактная запись токена
Режим URL-safe выдаёт base64url без завершающего =. Длина в GLYPH задаётся исходными байтами: 32 байта превращаются в 43 символа.
Для автоматической генерации есть secrets.token_urlsafe(32) в Python. Точные форматы описаны в справке модуля secrets.
И маленький нюанс: URL-safe — характеристика алфавита. Она не означает «можно светить секрет в любой ссылке». Адреса попадают в историю браузера и журналы. Передавайте токен так, как это предусмотрено вашим приложением.
Fernet: готовый формат для cryptography
Здесь уже конкретное требование: 32 случайных байта в URL-safe Base64. Текстовый ключ имеет длину 44 символа, включая завершающий =.
В GLYPH выбираете Fernet и создаёте результат. Не нужно вручную подгонять длину, обрезать строку или убирать знак в конце, потому что он «какой-то лишний». Для формата он вполне на своём месте.
В Python аналогичная генерация выглядит так:
from cryptography.fernet import Fernet
key = Fernet.generate_key()
Fernet использует один секретный ключ для шифрования и расшифрования. Потеряли ключ — потеряли возможность прочитать данные. Отдали постороннему — он сможет читать и создавать сообщения. Подробности — в официальной документации cryptography.
Новая генерация не возвращает доступ к тому, что было зашифровано прежним ключом. Кнопка «Создать» не является машиной времени.
Как перенести секрет в приложение
Выбрали формат, создали значение, сохранили в предусмотренное место. Потом проверьте, что принимающий код получает нужный алфавит и длину после декодирования.
Настоящие секреты не кладите в публичный Git, примеры конфигурации и скриншоты. Для Fernet отдельно продумайте хранение ключа: он должен оставаться доступен для нужных зашифрованных данных.
GLYPH держит историю только в памяти и очищает собственное содержимое буфера по таймеру. Постоянное хранилище секретов приложения из этого автоматически не получается.
Забирайте GLYPH, если удобнее создавать значения через окно. Для обычных аккаунтов есть инструкция по офлайн-генерации паролей.
Режимы и ограничения: GLYPH 0.1.2.