Вывести контрольную сумму `` `sha``` на диск в двоичном формате вместо шестнадцатеричного текста в bash - PullRequest
0 голосов
/ 02 марта 2020

Я хочу вывести контрольную сумму sha (здесь используется sha1sum, я знаю, что она не должна использоваться для шифрования, не волнуйтесь, это нормально для моих нужд) на диск из сценария bash. До сих пор я могу его выбросить (без каких-либо дополнительных ...). Но мне не удается вывести его в двоичном формате, вместо этого я получаю только незашифрованный шестнадцатеричный дамп:

$ echo "bla" | sha1sum | awk '{print $1}' | head -c-1 > test
$ ls -lrth test
-rw-r--r-- 1 jrlab jrlab 40 mars   2 15:02 test
$ xxd test
00000000: 3034 3735 3935 6430 6661 6539 3732 6662  047595d0fae972fb
00000010: 6564 3063 3531 6234 6134 3163 3761 3334  ed0c51b4a41c7a34
00000020: 3965 3063 3437 6262                      9e0c47bb

Например, здесь, если я прав, вывод sha1 действительно составляет 20 байтов long, который требует 40 символов для представления в шестнадцатеричной распечатке (то есть 40 байтов с кодировкой шестнадцатеричной распечатки в ASCII, и это является причиной того, почему xxd может транскрибировать все байты файла как символы 0-f), и это то, что присутствует в моем файле. Как я могу изменить это так, чтобы размер test составлял 20 байт на диске, то есть действительно записывался в двоичном формате?

Извините, если я пропустил простой способ сделать это, я гуглил (вероятно, неправильный вопрос) довольно долго не находя четкого ответа.

1 Ответ

2 голосов
/ 02 марта 2020

Нашел это! После еще нескольких копаний в форумах / справочных страницах xxd может решить эту проблему для меня (нашел здесь: https://gist.github.com/dstebila/6194f90097c43c091dd2):

# Convert hex to binary using xxd's reverser in plain hexdump style
xxd -r -ps

Итак xxd может взять файл, заполненный ASCII hexdump, и преобразовать его в двоичное содержимое:

$ echo "48454C4C4F" > test.hex
$ xxd test.hex
00000000: 3438 3435 3443 3443 3446 0a              48454C4C4F.
$ xxd -r -ps test.hex > test.bin
$ xxd test.bin
00000000: 4845 4c4c 4f                             HELLO
$ ls -lrth test.hex
-rw-r--r-- 1 jrlab jrlab 11 mars   2 15:44 test.hex
$ ls -lrth test.bin
-rw-r--r-- 1 jrlab jrlab 5 mars   2 15:44 test.bin
...