A07 PKCS5 Padding

Die Beschäftigung mit Kryptographie führt unweigerlich auch zum Thema „Padding“. Was ist nun das Padding ? Ganz einfach ausgedrückt füllt das Padding einen String (bzw. ein Byte Array) auf eine definierte Länge auf. Bei Nutzung der verschiedenen Kryptographie-Verfahren werdet Ihr immer stets darauf achten müssen, ob „Eurer“ Algorithsmus ein Padding unterstützt, ansonsten werdet Ihr unschöne Fehlermeldungen erhalten.

Als Beispiel soll der CBC-Algorithmus im Beispiel B06 dienen – hier gibt es Fehler, wenn der plaintextString nicht exakt 16 Zeichen (oder ein Vielfaches davon) lang ist.

Beim Auffüllen der Zeichen ist das verwendete Verfahren sehr wichtig, denn die Auffüllung sollte reversibel, also wieder entfernbar sein. So gibt es das sogenannte Null-Padding, bei dem der String durch 0-Bytes aufgefüllt wird.

Bei Nutzung der Java-Kryptographie werdet Ihr immer wieder mit dem PKCS5-Paddingverfahren in Berührung kommen (bei Nutzung von Bouncy Castle werdet Ihr die PKCS7-Variante kennen lernen, welche aber kompatibel ist). Beim AES PKCS5-Verfahren wird das Byte-Array stets auf die Blocklänge von 16 Zeichen erweitert und so gearbeitet: Bei einer Länge von 15 Zeichen wird ein 01 Byte angehängt, bei einer Länge von 14 Zeichen werden zwei 02-Bytes angefügt und so weiter. Bei einer Länge von 1 Zeichen werden die letzten 15 Stellen mit „0F“ (hexadezimal) bzw „15“ (dezimal) aufgefüllt. Was gilt aber wenn die Länge exakt der Blocklänge (16 Zeichen) entspricht ? Dann wird ein zusätzlicher Block angehangen, der nur aus (16 Stück) 00-Bytes besteht.

Nachfolgend findet Ihr ein kleines Java-Programm, welches das PKCS-Padding abbildet und Euch eine anschauliche Tabelle ausgibt.

Hier die versprochene Ausgabe:

Den Quellcode zum Programm findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/A-Allgemeine-Programme. Dort findet Ihr auch die Versionen für Java 11.

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 26.01.2019