PHP PGP: Die Ausgabe signieren

Achtung! Dieser Artikel ist älter als ein Jahr. Der Inhalt ist möglicherweise nicht mehr aktuell!

Den Fingerprint herausfinden

Das Signieren ist einfach. Zuerst braucht man den Fingerprint.

veloc1ty@currywurst:~$ gpg --fingerprint
/var/www/veloc1ty.de/.gnupg/pubring.gpg
---------------------------------------
pub 2048R/9F1902A9 2014-06-24
 Key fingerprint = 15C4 CD5F 36C9 8A6A 40A8 7C95 457B E382 9F19 02A9
uid veloc1ty API (API PGP Key) <api@veloc1ty.de>

Oben grün markiert ist die Info, die wir im Code brauchen. Die Leerzeichen muss man allerdings entfernen. Und wenn wir schon in einer Shell sind machen wir das mit sed.

veloc1ty@currywurst:~$ echo "15C4 CD5F 36C9 8A6A 40A8 7C95 457B E382 9F19 02A9" | sed -e "s/\s//g"
15C4CD5F36C98A6A40A87C95457BE3829F1902A9

Schon hat man einen korrekt formatierten Fingerprint.

Einfaches signieren

Ich komme aus dem Java Umfeld und arbeite deswegen so gut es geht mit Objekten. Hier geht das auch. Zuerst brauchen wir also ein Objekt.

<?php

$gpg = new gnupg();

?>

Hier wurde sich nicht an die Konvention gehalten. Der Klassenname ist komplett klein geschrieben.

Danach kann man über die Objektreferenz einen Schlüssel zum signieren hinzufügen. Dafür gibt es die Funktion addsignkey. Parameter 1 ist der Fingerprint, Parameter 2 ist optional und stellt das Passwort dar.

<?php

$gpg = new gnupg();

$gpg->addsignkey('15C4CD5F36C98A6A40A87C95457BE3829F1902A9','geheimnis');

?>

Nun kann man schon den ersten Text signieren.

<?php

$gpg = new gnupg();

$gpg->addsignkey('15C4CD5F36C98A6A40A87C95457BE3829F1902A9','geheimnis');

echo($gpg->sign('Ein einfacher Test'));

?>

Und wenn man sich das dann im Browser ansieht ist die Ausgabe ziemlich wirr. Der Browser versucht den Text als HTML zu interpretieren. Deshalb sagen wir dem Browser über HTTP Header, dass nur reiner Text zurückgegeben wird.

<?php
header("Content-Type: text/plain");
$gpg = new gnupg();

$gpg->addsignkey('15C4CD5F36C98A6A40A87C95457BE3829F1902A9','geheimnis');

echo($gpg->sign('Ein einfacher Test'));

?>

Nun wird der Zeilenumbruch korrekt dargestellt. Das sieht dann zum Beispiel so aus:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ein einfacher Test
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQEcBAEBAgAGBQJTqmueAAoJEEV744KfGQKp+mUH/3DOrlsrDVK/o2nI/Ev251Gs
6I5QF1Nji9VB+dW3+mh/4JkN/g6G6KaQa4W0yKL2pIqebCWQwBgsHOOv3t8qX6pQ
JLvokiBQeJS46lg7hjAGcS7TzID81yJEbO4LCiK2rC4/T1X7D3Xi0X+STnmHp5U2
Kk8dz8vTeiOQ8uMSOw5CM+eNsWghP5D01r4R8/vVmCDC1JoHoTsWZ30JR1cpRgXS
61OYrqZcNLLswXhUnWV+zWEKxgtJBLbZLFp4XTlcIXGWWSgY5yMQHfrw7KU0AbC7
svof/Qd81ypYmGcoXsDYugeRCBKf3wI9y8iaIPCuxI8DqiHq2lLVabe1rYBb5qg=
=y7ar
-----END PGP SIGNATURE-----

Sieht doch schon mal gut aus.


Du hast einen Kommentar, einen Wunsch oder eine Verbeserung? Schreib mir doch eine E-Mail! Die Infos dazu stehen hier.

🖇️ = Link zu anderer Webseite
🔐 = Webseite nutzt HTTPS (verschlüsselter Transportweg)
Zurück