Как удалить подпись GPG из подписанного файла без создания нового файла на диске?

Если у меня есть подписанный двоичный файл размером 100 МБ, который я загружаю через интернет, мне нужно 200 Мб дискового пространства, чтобы открыть его. Файл просто подписан, а не зашифрован.

при нехватке места на диске невозможно получить исходный файл из-за сбоя команды gpg. Я видел, что подписанный файл gpg является исходным файлом + некоторые байты подписи в начале и в конце. Можно ли удалить эти байты из файла без создания нового файла, тем самым экономя место на диске ? Подпись можно проверить с помощью :

# gpg --verify filename.gpg

без создания нового файла на диске. Пример рабочего процесса описан ниже:

# # Sample workflow
# cd /tmp/new
# wget http://someaddress/filename.gpg
# ls
filename.gpg
# du -h filename.gpg
100M filename.gpg
# gpg filename.gpg
gpg: Signature made Thu May 28 10:53:26 2015 UTC using RSA key ID XXXXXXXXX
gpg: Good signature from "Example <example@example.com>"
# ls
filename filename.gpg
# du -ch *
100M filename
100M filename.gpg
200M total
# rm filename.gpg

когда на диске мало места, имя файла gpg.команда gpg не будет выполнена.

2
задан Elison Niven
19.12.2022 1:59 Количество просмотров материала 3361
Распечатать страницу

2 ответа

вы можете объединить процесс загрузки и проверить подпись в одном конвейерном процессе, как это:

wget -qO- http://someaddress/filename.gpg|gpg >filename
1
отвечен Romeo Ninov 2022-12-20 09:47

да, байты можно удалять с начала и с конца, не занимая больше места на диске. Большинство утилит, однако, будет скопировать файл в новый файл, удалить старый и переименовать новый такой же как старый. Думаю, можно с уверенностью предположить gpg в этой категории. Это, конечно, использует двойное дисковое пространство, необходимое для файла.

что вам нужно сделать, это:

  1. на месте переместите байты файла "вниз" на размер PGP заголовок
  2. установите длину файла, чтобы удалить трейлер PGP

С помощью правильной утилиты можно было бы даже сделать это за один шаг, и можно было бы легко написать программу на C, чтобы сделать именно это.

тем не менее, я предполагаю, что вы хотите сделать это только с уже доступными инструментами. На самом деле это можно сделать с помощью dd:

dd if=filename.gpg of=filename.gpg bs=49 skip=1 conv=notrunc

это при условии, что заголовок имеет длину 49 байт. (YMMV)

теперь нужно обрезать файл до нужной длины. Есть утилита под названием truncate в GNU coreutils что будет присутствовать на многих системах Unix. Однако необходимо знать байтовое смещение трейлера. Это можно сделать с помощью GNU grep:

grep -b '^-----BEGIN PGP SIGNATURE-----' filename.gpg

это будет выводить что-то вроде:

104857600:-----BEGIN PGP SIGNATURE-----

последним шагом является использование этого значения с truncate:

truncate -s 104857600 filename.gpg

однако, если вы знаете длину прицепа уже, вы можете пропустить grep и просто сказать truncate сократить файл на это количество байт:

truncate -s -103 filename.gpg
1
отвечен Neil Mayhew 2022-12-20 12:04

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх