
Wenn ich eine 100 MB große signierte Binärdatei über das Internet herunterlade, benötige ich 200 MB Speicherplatz, um sie zu öffnen. Die Datei ist nur signiert, nicht verschlüsselt.
Wenn der Speicherplatz knapp ist, ist es nicht möglich, die Originaldatei abzurufen, da der GPG-Befehl fehlschlägt. Ich habe gesehen, dass die signierte GPG-Datei die Originaldatei + einige Signaturbytes am Anfang und am Ende ist. Ist es möglich, diese Bytes aus der Datei zu entfernen, ohne eine neue Datei zu erstellen und so Speicherplatz zu sparen? Die Signatur kann wie folgt überprüft werden:
# gpg --verify filename.gpg
ohne eine neue Datei auf der Festplatte zu erstellen. Ein Beispiel-Workflow wird unten beschrieben:
# # 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 <[email protected]>"
# ls
filename filename.gpg
# du -ch *
100M filename
100M filename.gpg
200M total
# rm filename.gpg
Wenn der Speicherplatz gering ist, schlägt der Befehl gpg filename.gpg fehl.
Antwort1
Sie können den Download-Prozess und die Signaturprüfung in einem Piped-Prozess wie folgt kombinieren:
wget -qO- http://someaddress/filename.gpg|gpg >filename
Antwort2
Ja, Sie können Bytes vom Anfang und Ende entfernen, ohne mehr Speicherplatz zu verbrauchen. Die meisten Dienstprogramme kopieren die Datei jedoch in eine neue Datei, löschen die alte und benennen die neue Datei dann so um, dass sie mit der alten identisch ist. Ich denke, man kann davon ausgehen, dass dies gpg
in diese Kategorie fällt. Dabei wird natürlich doppelt so viel Speicherplatz verbraucht wie die Datei.
Was Sie tun müssen, ist:
- Verschieben Sie die Bytes der Datei direkt um die Größe des PGP-Headers nach unten.
- Legen Sie die Dateilänge fest, um den PGP-Trailer zu entfernen
Mit dem richtigen Dienstprogramm wäre es sogar möglich, dies in einem einzigen Schritt zu erledigen, und man könnte problemlos ein C-Programm schreiben, das genau dies tut.
Ich gehe jedoch davon aus, dass Sie dies nur mit den bereits verfügbaren Tools tun möchten. Dies ist tatsächlich möglich mit dd
:
dd if=filename.gpg of=filename.gpg bs=49 skip=1 conv=notrunc
Dies setzt voraus, dass der Header 49 Byte lang ist. (YMMV)
Nun müssen Sie die Datei auf die richtige Länge kürzen. Dafür gibt es ein Hilfsprogramm namens truncate
GNU coreutils
, das auf vielen Unix-Systemen vorhanden ist. Sie müssen jedoch den Byte-Offset des Trailers kennen. Dies lässt sich mit GNU erledigen grep
:
grep -b '^-----BEGIN PGP SIGNATURE-----' filename.gpg
Die Ausgabe ähnelt der folgenden:
104857600:-----BEGIN PGP SIGNATURE-----
Der letzte Schritt besteht darin, diesen Wert mit Folgendem zu verwenden truncate
:
truncate -s 104857600 filename.gpg
Wenn Sie die Länge des Trailers jedoch bereits kennen, können Sie dies überspringen grep
und einfach angeben, truncate
dass die Datei um diese Anzahl von Bytes gekürzt werden soll:
truncate -s -103 filename.gpg