Alternativa ao xxd que retorna bytes?


3

Estou no Mac OS X 10.8.2, executando uma cópia compilada da xxdv1.10 ( código fonte ), bem como a cópia xxdque vem pré-instalada no OS X.

Estou tentando gerar uma assinatura SHA1 codificada em Base64 por meio de uma cadeia de comandos canalizados no Terminal.

Normalmente, eu faria algo como o seguinte:

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

O arquivo foo_sha1_signaturenormalmente contém um hash SHA1 codificado em Base64 da sequência foo.

O problema é que xxd -p -rnão retorna nenhum dado, portanto o arquivo foo_sha1_signatureestá vazio.

Se eu dividir os comandos para analisar a saída xxd -r, obterá um resultado (conforme impresso abaixo):

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

Mas se eu canalizar a saída padrão para um arquivo, o arquivo estará vazio:

$ 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

Se eu tentar o erro padrão de canalização, a saída padrão mostrará os bytes e o arquivo ainda está vazio:

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

Finalmente, se eu fizer tudo isso no Linux, xxdfuncionará conforme o esperado (recebo a assinatura em um arquivo). Portanto, isso parece ser um erro de como xxdfunciona no OS X 10.8.2.

Existe uma alternativa de código aberto para a xxdqual funciona no Mac OS X e envia uma representação em bytes da entrada padrão para a saída padrão?


Eu não tenho um Mac, então não posso ter certeza, mas od e hexdump suportam a funcionalidade que você precisa. Mas você precisará confirmar se isso funciona em um Mac.
dinesh

Quais opções eu uso com o hexdump para obter saída de bytes? Posso obter saída hexadecimal, mas não vejo qual opção usar para obter saída em bytes idêntica à que xxd gera.
Alex Reynolds

1
O primeiro comando funciona para mim no 10.8.2. (Mesmo que seja o hash de $'foo\n'.) Openssl, xxd e base64 são versões pré-instaladas.
Lri

O primeiro comando funciona para mim também, mas xxd -p | xxd -rnão funciona e não deve ser esperado (e não é o mesmo que xxd -p -r). xxd -pfaz um despejo hexadecimal de texto simples (neste caso, de algo que é um despejo hexadecimal de texto simples); xxd -rtenta fazer uma conversão reversa (hex -> binária), mas espera um despejo formatado (não texto simples) como entrada e ficará confuso ao receber um despejo de texto simples.
Gordon Davisson

Funciona para mim no Linux, mas não no Mac OS X 10.8.2 no meu MacBook Air. Nem a versão pré-instalada xxdnem a que eu compilei. xxd -pfunciona, mas xxd -p -rfornece uma string em branco. Existe uma alternativa para xxdque funcione da mesma maneira xxd -p -r?
Alex Reynolds

Respostas:


-1

Você deveria tentar

xxd -b <file>

Ele exibirá o arquivo no modo binário.


Bem-vindo ao superusuário. Você pode fornecer um pouco mais de detalhes e explicar o que isso faz?
Twisty Impersonator
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.