Sto guardando gli esempi di librerie crittografiche (programmate in c) fornite per OpenSSL EVP su OpenSSL Wiki .
Il loro esempio per un vettore di inizializzazione a 128 bit è il seguente:
/* A 128 bit IV */
unsigned char *iv = (unsigned char *)"01234567890123456";
0-9 - > 10 caratteri
0-6 - > 7 caratteri
Totale: 17 caratteri
Ogni char è 1 byte (8 bit) sul mio sistema. Quindi l'IV è 8 * 17 = 136 bit. Perché stanno dicendo che la dimensione IV totale è di 128 bit? Si tratta di un errore off-by-1 o mi manca qualcosa?
Risposta: Stephen aveva ragione. Questo è stato molto semplice da controllare, ho appena cambiato la IV per essere la lunghezza corretta e il testo cifrato è rimasto lo stesso. Quindi, il byte extra non viene utilizzato nell'algoritmo e qualcuno ha avuto un conteggio errato.
Predefinito IV:
/* A 128 bit IV */
unsigned char *iv = (unsigned char *)"01234567890123456";
Output:
Ciphertext is:
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
Nuovo IV:
/* A 128 bit IV */
unsigned char *iv = (unsigned char *)"0123456789012345";
Esegui make di nuovo per creare il programma.
Output:
Ciphertext is:
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