In der Kryptographie ist PKCS # 7-Auffüllung ein Auffüllschema, das eine Anzahl von Bytes N ≥ 1 hinzufügt, wobei der Wert jedes hinzugefügten Bytes gleich N ist.
Beispiel: Hello, World!
13 Byte sind hexadezimal wie folgt:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Wenn wir PKCS # 7 Pad auf Länge 16 wählen, dann ist das Ergebnis:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
Und wenn wir uns dafür entscheiden, auf Länge 20 aufzufüllen, lautet das Ergebnis:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Beachten Sie, dass wir im ersten Beispiel drei 03
Bytes und im zweiten sieben 07
Bytes hinzufügen .
Ihre Aufgabe besteht darin, zu überprüfen, ob eine Zeichenfolge (oder ein ganzzahliges Array) die richtige PKCS # 7-Auffüllung aufweist. Das heißt, wenn das letzte Byte der Eingabezeichenfolge N ist, sollte Ihr Programm prüfen, ob die letzten N Bytes der Zeichenfolge N entsprechen.
Eingang
Eine einzelne nicht leere ASCII-Zeichenfolge, die Zeichen zwischen den Codepunkten 1 und 127 enthält. Wenn Sie möchten, können Sie die Eingabe stattdessen als Array von Ganzzahlen annehmen.
Ausgabe
Ein wahrer Wert, wenn die Eingabezeichenfolge eine gültige PKCS # 7-Auffüllung aufweist, andernfalls ein falscher Wert.
Beide Funktionen und vollständige Programme sind akzeptabel. Dies ist Codegolf , daher ist es das Ziel, die Anzahl der Bytes in Ihrem Code zu minimieren.
Testfälle
Die Integer-Array-Version der Eingaben wird hier dargestellt. Die String-Version würde für viele der folgenden Testfälle nicht druckbare Zeichen enthalten:
Wahrheit:
[1]
[1, 1]
[2, 1]
[2, 2]
[5, 6, 5, 3, 3, 3]
[1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2]
[95, 115, 80, 32, 71, 7, 122, 49, 13, 7, 7, 7, 7, 7, 7, 7, 7]
[27, 33, 54, 65, 97, 33, 52, 55, 60, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
[15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15]
Falsch:
[2]
[1, 2]
[5, 5, 5, 5]
[5, 6, 5, 4, 4, 4]
[3, 3, 3, 94, 3, 3]
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 127]
[50, 39, 94, 105, 49, 29, 74, 102, 2, 106, 44, 7, 7, 7, 7, 7, 7]
[26, 27, 59, 25, 122, 110, 20, 30, 114, 6, 9, 62, 121, 42, 22, 60, 33, 12]
7
s endet ). Sie können daran denken , wie, nach dem Strippen, Sie würden am Ende [1 2 3]
.
[1 2 3 3 3 3]
wahr oder falsch? Ich denke, es sollte wahr sein, aber ich bin nicht positiv.