Estoy viendo los ejemplos de bibliotecas criptográficas (programados en c) proporcionados para OpenSSL EVP en OpenSSL Wiki .
Su ejemplo para un vector de inicialización de 128 bits es el siguiente:
/ * A 128 bit IV * /
unsigned char * iv = (unsigned char *) "01234567890123456";
0-9 - > 10 caracteres
0-6 - > 7 caracteres
Total: 17 caracteres
Cada caracter es de 1 byte (8 bits) en mi sistema. Por lo tanto, el IV es 8 * 17 = 136 bits. ¿Por qué dicen que el tamaño total de IV es de 128 bits? ¿Es este un error de off-by-1 o me falta algo?
Respuesta: Stephen tenía razón. Esto fue muy fácil de verificar, simplemente cambié el IV para que tuviera la longitud correcta y el texto cifrado permaneció igual. Por lo tanto, el byte extra no se utiliza en el algoritmo y alguien cuenta incorrectamente.
Predeterminado IV:
/ * A 128 bit IV * /
unsigned char * iv = (unsigned char *) "01234567890123456";
Salida:
El texto cifrado es:
0000 - e0 6f 63 a7 11 e8 b7 aa-9f 94 40 10 7d 46 80 a1 .oc ....... @.} F ..
0010 - 17 99 43 80 ea 31 d2 a2-99 b9 53 02 d4 39 b9 70 ..C..1 .... S..9.p
0020 - 2c 8e 65 a9 92 36 ec 92-07 04 91 5c f1 a9 8a 44, .e..6 ........ D
Nuevo IV:
/ * A 128 bit IV * /
unsigned char * iv = (unsigned char *) "0123456789012345";
Ejecuta make de nuevo para construir el programa.
Salida:
El texto cifrado es:
0000 - e0 6f 63 a7 11 e8 b7 aa-9f 94 40 10 7d 46 80 a1 .oc ....... @.} F ..
0010 - 17 99 43 80 ea 31 d2 a2-99 b9 53 02 d4 39 b9 70 ..C..1 .... S..9.p
0020 - 2c 8e 65 a9 92 36 ec 92-07 04 91 5c f1 a9 8a 44, .e..6 ........ D