Alternatywą dla xxd, która zwraca bajty?

3

Jestem na Mac OS X 10.8.2, uruchamiam skompilowaną kopię xxdv1.10 ( kod źródłowy ), a także kopię xxdtego preinstalowanego na OS X.

Próbuję wygenerować sygnaturę SHA1 zakodowaną w Base64 za pomocą łańcucha potoków komend w terminalu.

Normalnie zrobiłbym coś takiego:

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

Plik foo_sha1_signaturezwykle zawiera zakodowany w Base64 skrót SHA1 ciągu foo.

Problem polega na tym, xxd -p -rże nie zwraca żadnych danych, więc plik foo_sha1_signaturejest pusty.

Jeśli podzielę polecenia, aby zobaczyć wyjście xxd -r, otrzymam wynik (jak pokazano poniżej):

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

Ale jeśli wypiszę standardowe wyjście do pliku, plik jest pusty:

$ 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

Jeśli spróbuję standardowego błędu potoku, standardowe wyjście pokazuje bajty, a plik jest nadal pusty:

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

Wreszcie, jeśli zrobię to wszystko na Linuksie, xxddziała zgodnie z oczekiwaniami (otrzymuję podpis w pliku). Wydaje się, że jest to błąd związany z xxddziałaniem w systemie OS X 10.8.2.

Czy istnieje alternatywa open-source, xxdktóra działa na Mac OS X i przesyła reprezentację bajtową standardowego wejścia na standardowe wyjście?

Alex Reynolds
źródło
Nie mam komputera Mac, więc nie mogę na pewno powiedzieć, ale od i hexdump obsługują potrzebne funkcje. Ale będziesz musiał dla nas potwierdzić, czy to działa na Macu.
dinesh
Jakich opcji używać z zrzutem heksowym, aby uzyskać wyjście bajtowe? Mogę uzyskać wyjście szesnastkowe, ale nie widzę jakiej opcji użyć, aby uzyskać wyjście bajtowe identyczne z wyjściami xxd.
Alex Reynolds
1
Pierwsze polecenie działa dla mnie na 10.8.2. (Nawet jeśli jest to skrót $'foo\n'). Openssl, xxd i base64 to wszystkie preinstalowane wersje.
Lri
Pierwsze polecenie działa również dla mnie, ale xxd -p | xxd -rnie, i nie powinno się tego oczekiwać (i wcale nie jest takie samo xxd -p -r). xxd -pwykonuje zrzut szesnastkowy w postaci jawnego tekstu (w tym przypadku czegoś, co jest już zrzutu szesnastkowego w postaci zwykłego tekstu); xxd -rpróbuje wykonać konwersję odwrotną (hex -> binarna), ale oczekuje, że jako dane wejściowe zostanie sformatowany zrzut (nie tekst jawny), a zamiast tego otrzyma zrzut tekstu jawnego.
Gordon Davisson
Działa na mnie w systemie Linux, ale nie na Mac OS X 10.8.2 na moim MacBooku Air. Ani wstępnie zainstalowana wersja, xxdani ta, którą skompilowałem. xxd -pdziała, ale xxd -p -rdaje pusty ciąg. Czy istnieje alternatywa dla xxdtego, która działa tak samo jak xxd -p -r?
Alex Reynolds

Odpowiedzi:

-1

Powinieneś spróbować

xxd -b <file>

Wyświetli plik w trybie binarnym.

luiscabus
źródło
Witamy w Super Użytkowniku. Czy możesz podać trochę więcej szczegółów i wyjaśnić, co to robi?
Twisty Impersonator