Альтернатива xxd, которая возвращает байты?

1981
Alex Reynolds

Я нахожусь на Mac OS X 10.8.2, на котором запущена скомпилированная копия xxdv1.10 ( исходный код ), а также копия, xxdкоторая поставляется с предустановленной на OS X.

Я пытаюсь сгенерировать подпись SHA1 в кодировке Base64 через цепочку переданных команд в Терминале.

Обычно я бы сделал что-то вроде следующего:

$ echo "foo" | openssl sha1 | xxd -p -r | base64 - > foo_sha1_signature 

Файл foo_sha1_signatureобычно содержит хеш-строку SHA1 в кодировке Base64 foo.

Проблема в том, что xxd -p -rне возвращает никаких данных, поэтому файл foo_sha1_signatureпуст.

Если я разделю команды, чтобы посмотреть на вывод xxd -r, я получу результат (как показано ниже):

$ echo "foo" | openssl sha1 | xxd -p | xxd -r 7b36c94bcdf32bee$ 

Но если я перенаправлю стандартный вывод в файл, файл будет пуст:

$ echo "foo" | openssl sha1 | xxd -p | xxd -r > foo_sha1_bytes $ ls -al foo_sha1_bytes  -rw-r--r-- 1 alexpreynolds staff 0 Jan 2 23:02 foo_sha1_bytes 

Если я пытаюсь передать стандартную ошибку, стандартный вывод показывает байты, а файл все еще пуст:

$ echo "foo" | openssl sha1 | xxd -p | xxd -r 2> foo_sha1_bytes 7b36c94bcdf32bee$ 

Наконец, если я делаю все это в Linux, xxdработает должным образом (я получаю подпись в файле). Так что это похоже на ошибку в том, как xxdработает в OS X 10.8.2.

Существует ли альтернатива с открытым исходным кодом, xxdкоторая работает в Mac OS X и отправляет байтовое представление стандартного ввода в стандартный вывод?

3
У меня нет Mac, поэтому я не могу сказать наверняка, но [od] (http://linux.101hacks.com/unix/od-command-examples/) и [hexdump] (http: // www. novell.com/communities/node/6419/making-sense-hexdump) поддерживает необходимую вам функциональность. Но вы должны будете подтвердить для нас, работает ли это на Mac. dinesh 11 лет назад 0
Какие опции я использую с hexdump для получения байтового вывода? Я могу получить шестнадцатеричный вывод, но я не вижу, какой вариант использовать для получения байтового вывода, идентичного тому, что выводит xxd. Alex Reynolds 11 лет назад 0
У меня первая команда работает на 10.8.2. (Несмотря на то, что это хэш `$ 'foo \ n'`.) Openssl, xxd и base64 - это все предустановленные версии. user495470 11 лет назад 1
Первая команда также работает для меня, но `xxd -p | xxd -r` этого не делает, и не следует ожидать (и совсем не то же самое, что `xxd -p -r`). `xxd -p` делает шестнадцатеричный дамп открытого текста (в данном случае, что-то, что * уже * шестнадцатеричный дамп открытого текста); `xxd -r` пытается выполнить обратное (шестнадцатеричное -> двоичное) преобразование, но оно ожидает отформатированный (не открытый текст) дамп в качестве входных данных и будет сбит с толку, когда вместо него будет дан дамп открытого текста. Gordon Davisson 11 лет назад 0
Он работает для меня в Linux, но не для Mac OS X 10.8.2 на моем MacBook Air. Ни предустановленная версия `xxd`, ни та, которую я скомпилировал. `xxd -p` работает, но` xxd -p -r` дает пустую строку. Есть ли альтернатива `xxd`, которая работает так же, как` xxd -p -r`? Alex Reynolds 11 лет назад 0
@AlexReynolds На компьютере с Linux вы можете использовать опцию `-e`, чтобы указать строку формата. В вашем случае замена команды xxd на `hexdump '8/1"% 02X "' должна работать. Проверьте эту [ссылку] (http://zagaeski.devio.us/0006.html) для получения дополнительной информации об указании строк формата для hexdump. Если это работает, я могу опубликовать более подробную информацию об утилите hexdump в ответе. Не хочу делать это, пока мы не сможем подтвердить эту работу. dinesh 11 лет назад 0
В Linux `echo" foo "| openssl sha1 | hexdump '8/1 "% 02X"' -` выдает сообщения об ошибках: `hexdump: 8/1"% 02X ": нет такого файла или каталога`,` hexdump: -: нет такого файла или каталога` и `hexdump: -: Плохой дескриптор файла. Если я опускаю дескриптор `stdin`, то получаю` hexdump: 8/1 "% 02X": нет такого файла или каталога` и `hexdump: 8/1"% 02X ": ошибки неверного дескриптора файла. Я еще не пробовал это на Mac OS X, но он поставляется с hexdump. Какие-нибудь мысли? Alex Reynolds 11 лет назад 0
Также попробовал `echo" foo "| openssl sha1 | hexdump -v -e '8/1 "% 02X"' `, но это дает неправильный ответ или, по крайней мере, ответ, который отличается от` xxd` в Linux. Alex Reynolds 11 лет назад 0

1 ответ на вопрос

-1
luiscabus

Тебе стоит попробовать

xxd -b <file> 

Он отобразит файл в двоичном режиме.

Добро пожаловать в Супер пользователя. Можете ли вы предоставить немного больше деталей и объяснить, что это делает? Twisty Impersonator 5 лет назад 0