:::: MENU ::::

Base45/Zlib/COSE/CBOR Digitalen Corona Impfnachweis QR mit PHP auslesen

Ein Kunde suchte eine Möglichkeit mit PHP die Daten des digitalen Impfpasses (CovPass) bzw. die Daten des QR Codes auszulesen. Den QR als solchen auszulesen ist erstmal kein Problem, doch das digitale COVID Zertifikat ist kodiert und hier beginnen dann auch die ersten Probleme / Hürden für den einfachen PHP-Entwickler.

Im Wikipedia Artikel zum Digitalen Impfnachweis finden sich Erklärungen zum Funktionsprinzip:  Der QR-Code ist mit Base45 (Achtung! Kein Base64…), ZLIB und CBOR  kodiert. Details zu diesem Funktionsprinzip findet Ihr auch im Blog von Anselm. Seine Erklärungen und seine Lösung in Python haben mir sehr geholfen, selber eine PHP Script zum auslesen des digitalen Impfpasses zu erstellen.

Im Prinzip ist es schon recht easy:

  • Den Prefix “HC1: ” aus dem QR-String entfernen
  • Die Base45 Schale könnt Ihr mit https://github.com/mhauri/base45 decodieren.
  • Die Zlib Schale könnt Ihr mit zlib_decode() abwerfen
  • Die COSE/CBOR ist schon etwas tricky: Hierzu kann https://github.com/Spomky-Labs/cbor-php verwendet werden.
    • Erst das Zlib Ergebnis mit CBOR decodieren
    • Dann das Ergebnis nochmal mit CBOR decodieren, allerdings nur den Wert an Index 2  ($result[2]).
  • Das Ergebnis ist nun ein Array mit allen Zertifikatsdaten 🙂

Vermutlich seid Ihr per Suchmaschine meinen Artikel gestoßen. Das Coole ist: Es gibt bereits eine Lösung in PHP die euch die einzelnen Schritte abnimmt: Unter https://github.com/masterix21/green-pass findet Ihr ein fertiges Programm zum decodieren des QR-Codes  – auch für Genesene und Getestete :-). Gefunden hatte ich dieses natürlich erst nachdem ich alle Schritte “von Hand” durchgeführt hatte und nur Kommissar Zufall mich zu dem Gitprojekt geführt hatte. Diesen Aufwand möchte ich Euch gerne ersparen.


Comments are closed.