Nella crittografia, il padding PKCS # 7 è uno schema di padding che aggiunge un numero di byte N ≥ 1, in cui il valore di ciascun byte aggiunto è uguale a N.
Ad esempio, Hello, World!
che ha 13 byte, è il seguente in esadecimale:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Se scegliamo il pad PKCS # 7 alla lunghezza 16, il risultato è:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
E se scegliamo di riempire fino alla lunghezza 20, il risultato è:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Si noti che nel primo esempio aggiungiamo tre 03
byte e nel secondo aggiungiamo sette 07
byte.
Il tuo compito sarà convalidare se una stringa (o un array intero) ha il padding PKCS # 7 corretto. Cioè, se l'ultimo byte della stringa di input è N, il programma dovrebbe verificare che gli ultimi N byte della stringa siano uguali a N.
Ingresso
Una singola stringa ASCII non vuota contenente caratteri tra i punti di codice 1 e 127 inclusi. Se lo desideri, puoi invece prendere l'input come una matrice di numeri interi.
Produzione
Un valore true se la stringa di input ha un padding PKCS # 7 valido, altrimenti un valore falsy.
Sono accettabili sia funzioni che programmi completi. Questo è code-golf , quindi l'obiettivo è ridurre al minimo il numero di byte nel codice.
Casi test
La versione di array di numeri interi di input è presentata qui - la versione di stringa avrebbe caratteri non stampabili per molti dei seguenti casi di test:
Truthy:
[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]
Falsy:
[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). Puoi pensarlo come, dopo esserti spogliato, finiresti [1 2 3]
.
[1 2 3 3 3 3]
verità o falsità? Io penso che dovrebbe essere truthy, ma io non sono positive.