LINUX.ORG.RU

Как сконвертировать checksum в binary через bash?

 


0

2

Доброго времени суток Как в первые 32 байта бинарного файла записать данные вида «6e9c9c03f94d2104dcaac0735f7ce24e204505d1696d376525241076dcf9abe2» чтобы вышло так:

0000000 6e 9c 9c 03 f9 4d 21 04 dc aa c0 73 5f 7c e2 4e
0000010 20 45 05 d1 69 6d 37 65 25 24 10 76 dc f9 ab e2
используя только bash?


echo -n -e "\\x6e\\x9c\\x9c\\x03\\xf9\\x4d\\x21\\x04\\xdc\\xaa\\xc0\\x73\\x5f\\x7c\\xe2\\x4e\\x20\\x45\\x05\\xd1\\x69\\x6d\\x37\\x65\\x25\\x24\\x10\\x76\\xdc\\xf9\\xab\\xe2" > tmp.bin
dd conv=notrunc if=tmp.bin of=file
kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Вопрос стоит именно в конвертировании строки вида «6e9c9c» в бинарный код. \x6e\x9c\x9c Повторяю, строку формирует shasum. Или ей как то можно задать бинарный формат вместо ее дурацкого? Ключ -b не подходит.

MBK
() автор топика
Ответ на: комментарий от MBK
echo -e -n `echo 6e9c9c03f94d2104dcaac0735f7ce24e204505d1696d376525241076dcf9abe2 | sed -e 's/\S\S/&\\\\x/g' -e 's/\\\\x$//' -e 's/^/\\\\x/'` > tmp.bin
dd conv=notrunc if=tmp.bin of=file

Вместо «echo 6e9c9c03f94d2104dcaac0735f7ce24e204505d1696d376525241076dcf9abe2» подставляй свою утилиту.

Т.е. что-то вроде:

echo -e -n `shasum <SAME_FILE> | cut -f1 -d" " | sed -e 's/\S\S/&\\\\x/g' -e 's/\\\\x$//' -e 's/^/\\\\x/'` > tmp.bin
dd conv=notrunc if=tmp.bin of=file

Ключ -b не подходит.

Потому, что:

  -b, --binary      read in binary mode
Думай.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 4)
Ответ на: комментарий от kostik87

Ну, в принципе, до этого использовалось решение

for i in $(seq 1 2 64) ; do
    echo -n "\x""$(expr substr $DIGEST $i 2)" >> "$TMPFILE"
done
это примерно то же самое, только без sed А менее заднепроходного способа не существует?

MBK
() автор топика
Ответ на: комментарий от kostik87

ХЗ, возьми исходник shasum и поправь

Тогда уж лучше простенькую прожку скомпилировать, которая файл суммы считывала и записывала как надо. В общем, я правильно понял, что прямого решения через bash нет? Пичальбеда :-(

MBK
() автор топика
Ответ на: комментарий от MBK

что прямого решения через bash нет

Тебе и написали прямое решение именно через bash.

kostik87 ★★★★★
()
Ответ на: комментарий от anonymous

Может «только bash» значит, что и его нельзя. Но, вообще, я тоже на xxd подумал:

$ echo -n 6e9c9c03f94d2104dcaac0735f7ce24e204505d1696d376525241076dcf9abe2 | xxd -r -p | hexdump -C
00000000  6e 9c 9c 03 f9 4d 21 04  dc aa c0 73 5f 7c e2 4e  |n....M!....s_|.N|
00000010  20 45 05 d1 69 6d 37 65  25 24 10 76 dc f9 ab e2  | E..im7e%$.v....|
00000020

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Может «только bash» значит, что и его нельзя. Но, вообще, я тоже на xxd подумал:

Точно, именно то что надо, спасибо! Я тоже думал в эту сторону но сходу не получилось почему то

MBK
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.