Alternative zu xxd, die Bytes zurückgibt?

2174
Alex Reynolds

Ich arbeite unter Mac OS X 10.8.2 und führe eine kompilierte xxdVersion von v1.10 ( Quellcode ) sowie die unter xxdOS X vorinstallierte Kopie aus.

Ich versuche, eine Base64-codierte SHA1-Signatur über eine Kette von übergebenen Befehlen in Terminal zu generieren.

Normalerweise würde ich so etwas machen:

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

Die Datei foo_sha1_signatureenthält normalerweise einen Base64-codierten SHA1-Hash der Zeichenfolge foo.

Das Problem ist, dass xxd -p -rkeine Daten zurückgegeben werden, daher ist die Datei foo_sha1_signatureleer.

Wenn ich die Befehle aufteile, um die Ausgabe zu sehen xxd -r, erhalte ich ein Ergebnis (wie unten gedruckt):

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

Wenn ich aber die Standardausgabe in eine Datei übergebe, ist die Datei leer:

$ 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 

Wenn ich einen Standardfehler beim Piping versuche, zeigt die Standardausgabe die Bytes an und die Datei ist noch leer:

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

Wenn ich das alles unter Linux mache, xxdfunktioniert es wie erwartet (ich bekomme die Signatur in einer Datei). Dies scheint also ein Fehler xxdin der Funktionsweise von OS X 10.8.2 zu sein.

Gibt es eine Open-Source-Alternative, xxddie unter Mac OS X funktioniert und eine Byte-Darstellung der Standardeingabe an die Standardausgabe sendet?

3
I don't have a Mac so I can't say for sure but [od](http://linux.101hacks.com/unix/od-command-examples/) and [hexdump](http://www.novell.com/communities/node/6419/making-sense-hexdump) support the functionality you need. But you'll have to confirm for us if this works on a Mac. dinesh vor 11 Jahren 0
Welche Optionen nutze ich mit Hexdump, um eine Byte-Ausgabe zu erhalten? Ich kann eine Hex-Ausgabe erhalten, aber ich sehe nicht, welche Option verwendet werden soll, um eine Byte-Ausgabe zu erhalten, die mit der von xxd identisch ist. Alex Reynolds vor 11 Jahren 0
Der erste Befehl funktioniert für mich am 10.8.2. (Auch wenn es sich um den Hash von $ foo \ n handelt.) Openssl, xxd und base64 sind alle vorinstallierte Versionen. user495470 vor 11 Jahren 1
Der erste Befehl funktioniert auch für mich, aber `xxd -p | xxd -r` tut dies nicht und sollte auch nicht erwartet werden (und ist überhaupt nicht das Gleiche wie `xxd -p -r`). "xxd -p" führt einen Klartext-Hex-Dump aus (in diesem Fall von etwas, das * bereits * ein Klartext-Hex-Dump ist); 'xxd -r' versucht, eine umgekehrte (hex -> binäre) Konvertierung durchzuführen, erwartet jedoch einen formatierten Dump (nicht Klartext) als Eingabe und wird verwirrt, wenn stattdessen ein Klartext-Dump gegeben wird. Gordon Davisson vor 11 Jahren 0
Es funktioniert für mich unter Linux, aber nicht für Mac OS X 10.8.2 auf meinem MacBook Air. Weder die vorinstallierte Version von `xxd 'noch die von mir kompilierte Version. `xxd -p` funktioniert, aber` xxd -p -r` ergibt eine leere Zeichenfolge. Gibt es eine Alternative zu `xxd`, die genauso funktioniert wie` xxd -p -r`? Alex Reynolds vor 11 Jahren 0
@AlexReynolds Auf einem Linux-Computer können Sie die Option `-e` verwenden, um eine Formatzeichenfolge anzugeben. In Ihrem Fall sollte das Ersetzen des xxd-Befehls durch `hexdump '8/1"% 02X "' funktionieren. Weitere Informationen zum Angeben von Formatzeichenfolgen für Hexdump finden Sie unter [Link] (http://zagaeski.devio.us/0006.html). Wenn dies funktioniert, kann ich in einer Antwort genauere Informationen zum Dienstprogramm hexdump posten. Das wollen wir erst, wenn wir bestätigen können, dass dies funktioniert. dinesh vor 11 Jahren 0
Unter Linux "echo" foo "| openssl sha1 | hexdump '8/1 "% 02X"' -` gibt Fehlermeldungen aus: `hexdump: 8/1"% 02X ": Keine solche Datei oder Verzeichnis ',` hexdump: -: Keine solche Datei oder Verzeichnis' und `hexdump: -: Ungültiger Dateideskriptor`. Wenn ich den `stdin`-Deskriptor weglasse, erhalte ich` hexdump: 8/1 "% 02X": Keine solche Datei oder ein solches Verzeichnis `und` hexdump: 8/1 "% 02X": Fehlerhafte Dateideskriptor-Fehler. Ich habe das noch nicht unter Mac OS X ausprobiert, aber es kommt mit `hexdump`. Irgendwelche Gedanken? Alex Reynolds vor 11 Jahren 0
Auch probierte `echo" foo "| openssl sha1 | hexdump -v -e '8/1 "% 02X"' `, aber dies gibt die falsche Antwort oder zumindest eine Antwort, die sich von` xxd` unter Linux unterscheidet. Alex Reynolds vor 11 Jahren 0

1 Antwort auf die Frage

-1
luiscabus

Du solltest es versuchen

xxd -b <file> 

Die Datei wird im Binärmodus angezeigt.

Willkommen bei Super User. Können Sie uns bitte etwas genauer erklären und erklären, was dies bedeutet? Twisty Impersonator vor 5 Jahren 0