Почему od добавляет начальные нули?

Вопрос или проблема

Используя Solaris 10 ipsec, ключ должен быть преобразован в шестнадцатеричный формат. Поэтому мне нужна команда для преобразования текста в шестнадцатеричный формат.

Эта строка работает хорошо

echo "mypassword" | od -t x1|head -1|tr -d ' ' |tr [a-z] [A-Z]

Выдает

00000006D7970617373776F72640A

Однако, используя онлайн-конвертер, она возвращает это

6D7970617373776F72640A

В качестве обходного пути я использую это

echo "mypassword" | od -t x1|head -1|tr -d ' ' |cut -c 8-1000|tr [a-z] [A-Z]

это возвращает

6D7970617373776F72640A

Вопрос в том, почему od возвращает эти 00000000?

0000000 — это смещение, которое вставляется в начале каждой новой строки. Смещение можно изменить, используя опцию, согласно мануалу, -A, --address-radix: формат вывода для смещений файла; RADIX может быть одним из [doxn], для Десятичной, Восьмеричной, Шестнадцатеричной системы или Без него.
Вы хотите опустить смещение, поэтому добавьте -An в ваш скрипт.

Ответ или решение

Вопрос о вводимых ведущих нулях в выводе команды od требует детального анализа, чтобы понять, что именно происходит и почему. Рассмотрим ситуацию, описанную вами.

Команда od, которая является сокращением от "octal dump", используется для вывода данных в различных форматах, таких как восьмеричный, десятичный, шестнадцатеричный и т.д. В вашем примере вы используете od для преобразования текстового пароля "mypassword" в шестнадцатеричное представление.

Ваша команда:

echo "mypassword" | od -t x1 | head -1 | tr -d ' ' | tr [a-z] [A-Z]

Возвращает результат:

00000006D7970617373776F72640A

Ведущие нули 0000000 в этом выводе представляют собой смещение от начала чтения данных. Посмотрим, почему это происходит и как с этим справиться.

Почему od добавляет ведущие нули?

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

Как отключить добавление ведущих нулей

Чтобы удалить это смещение из вывода, можно использовать опцию -An. Данная опция указывает od не выводить смещение. Пример исправленной команды:

echo "mypassword" | od -An -t x1 | tr -d ' ' | tr [a-z] [A-Z]

После добавления -An, вывод команды будет таким же, как при использовании вашего обходного решения:

6D7970617373776F72640A

Заключение

Вывод ведущих нулей в результате работы команды od обусловлен стандартным поведением этой утилиты, а именно выводом смещения на начало строки. Опция -An позволяет избавиться от отображения этого смещения, что принесет пользу в случаях преобразования текста в шестнадцатеричный формат без лишних данных.

Об этом стоит помнить, если вы столкнетесь с необходимостью аналогичных преобразований в будущем, и знание этих тонкостей упростит вашу работу с интерпретацией данных в системах типа Solaris 10.

Оцените материал
Добавить комментарий

Капча загружается...