Вопрос или проблема
Используя 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.