Ho intenzione di farla breve. È da un po 'che voglio implementare il mio programma di crittografia/decrittografia AES. Il programma di crittografia è andato bene e ha crittografato senza errori o strani output (dal momento che ho confrontato l'output del mio programma con uno commerciale funzionante e il risultato è stato lo stesso).Algoritmo di decrittografia AES
Wikipedia era (è) la mia guida in questa implementazione all'interno della quale ho letto "Un insieme di cicli inversi vengono applicati per trasformare il testo cifrato indietro nel testo in chiaro originale utilizzando la stessa chiave di crittografia."
Ci sono un paio di moduli che ho implementato:
- Aggiungere tondo chiave
- righe di scorrimento
- Sub byte
- Mix Colonna
ho paio implementato anche di implementazione inversa dei moduli di cui sopra:
- righe retromarcia
- Reverse Byte sub
- Reverse Mix Colonna
NOTA: non ho implementano tasto rotondo inverso in quanto, E 'XOR ing il testo in chiaro con la chiave di crittografia, e invertire di XOR è XOR stesso (correggetemi se sbaglio)
Così ho putted questo moduli nell'ordine inverso che ho fatto la crittografia, ma mai ho avuto il mio testo in chiaro di nuovo:
expandkey128(key);
rev_subbytes(data);
rev_shiftrows(data);
addroundkey(data,key,10);
for(int i = 9; i>= 1; i--) {
rev_subbytes(data);
rev_shiftrows(data);
rev_mixColum(data);
addroundkey(data,key,i);
}
addroundkey(data,key,0);
// Please note that I also did from 0 to 10 ,
// instead of 10 to 0 and didn't workout
E anche io ho pensato, forse non dovrei implementare il modello inverso dei moduli, forse devo usare quei moduli con i quali ho fatto crittografia, solo in ordine inverso; beh, indovina cosa? non ha funzionato! :
expandkey128(key);
addroundkey(data,key,0);
for(int i = 1; i<= 9; i++) {
subbytes(data);
shiftrows(data);
mixColum(data);
addroundkey(data,key,i);
}
subbytes(data);
shiftrows(data);
addroundkey(data,key,10);
Quindi, ecco la domanda: cosa c'è che non va? || qual è la sequenza corretta di applicare questi cosiddetti moduli o funzioni se lo farai?
hai calcolato correttamente la tua s-box, perché non puoi usare la stessa che stai usando per la crittografia. http://en.wikipedia.org/wiki/S-box Questo commento non é presente nella versione inglese di wikipedia. dai un'occhiata direttamente alle specifiche: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf Hai calcolato la s-box inversa per decifrare. – evildead
Sì effettivamente a rev_subbytes Ho S-box inverso di Rijndael –
c'è un grande strumento di là: http://www.cryptool.de/ In questo puoi fare qualsiasi trasformazione a mano.Forse devi eseguire il debug di ogni passaggio, forse lo strumento ti aiuterà a verificare ogni passaggio. – evildead