En criptografía, el relleno PKCS # 7 es un esquema de relleno que agrega un número de bytes N ≥ 1, donde el valor de cada byte agregado es igual a N.
Por ejemplo, Hello, World!
que tiene 13 bytes, es el siguiente en hexadecimal:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Si elegimos PKCS # 7 pad a la longitud 16, entonces el resultado es:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
Y si elegimos rellenar hasta la longitud 20, entonces el resultado es:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
Tenga en cuenta que en el primer ejemplo agregamos tres 03
bytes, y en el segundo agregamos siete 07
bytes.
Su tarea será validar si una cadena (o matriz de enteros) tiene el relleno PKCS # 7 correcto. Es decir, si el último byte de la cadena de entrada es N, entonces su programa debe verificar que los últimos N bytes de la cadena sean iguales a N.
Entrada
Una sola cadena ASCII no vacía que contiene caracteres entre los puntos de código 1 y 127 inclusive. Si lo desea, puede tomar la entrada como una matriz de enteros en su lugar.
Salida
Un valor verdadero si la cadena de entrada tiene un relleno PKCS # 7 válido; de lo contrario, un valor falso.
Ambas funciones y programas completos son aceptables. Este es el código de golf , por lo que el objetivo es minimizar el número de bytes en su código.
Casos de prueba
Aquí se presenta la versión de matriz entera de entradas: la versión de cadena tendría caracteres no imprimibles para muchos de los siguientes casos de prueba:
Verdad:
[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). Puedes pensar que, después de desnudarte, terminarías con [1 2 3]
.
[1 2 3 3 3 3]
veraz o falsey? Yo creo que debería ser Truthy pero no soy positivo.