dileoa
27-04-2022, 11:19
Ho progettato delle classi per gestire la cifratura a blocchi.
Le classi sono:
class DBlockCipher: una classe astratta che gestisce tutte le operazioni di cifratura indipendenti dallo specifico algoritmo;
template <class A, K> class DTBlockCipher: derivata da DBlockCipher , che utilizza l’algoritmo implementato dalla classe A e la relativa chiave implementata dalla classe K per effettuare la cifratura dei blocchi;
template <class A, K> class DTBlockCipherFile: derivata da DTBlockCipher specializzata per cifrare i file.
Ciascuna classe ha due costruttori:
DBlockCipher:
DBlockCipher(){ initialize();}
DBlockCipher(int NewMode){ initialize(); Mode = NewMode; }
DTBlockCipher:
DTBlockCipher(): DBlockCipher(){ initialize();}
DTBlockCipher(int NewMode): DBlockCipher(int NewMode){ initialize();}
DTBlockCipherFile:
DTBlockCipherFile(): DTBlockCipher(){ initialize();}
DTBlockCipherFile(int NewMode): DTBlockCipher(int NewMode){ initialize();}
Dove initialize() è una generica funzione che inizializza la classe e int Mode è il modo di cifratura a blocchi (ECB, CBC ecc.).
La riga di codice:
DTBlockCipherFile<DAESAlg, DAESKey> AES(CBC);
//DAESAlg classe che implementa AES
//DAESKey classe che implementa chiavi AES
//CBC è un valore numerico (1) per eseguire la modalità CBC
pensavo che desse luogo alla sequenza di chiamate dei costruttori:
DTBlockCipherFile(CBC) => DTBlockCipher(CBC) => DBlockCipher(CBC)
Invece la sequenza è:
DTBlockCipherFile(CBC) => DTBlockCipher(CBC) => DBlockCipher()
Cosa ho sbagliato? Potete aiutarmi?
Grazie.
Le classi sono:
class DBlockCipher: una classe astratta che gestisce tutte le operazioni di cifratura indipendenti dallo specifico algoritmo;
template <class A, K> class DTBlockCipher: derivata da DBlockCipher , che utilizza l’algoritmo implementato dalla classe A e la relativa chiave implementata dalla classe K per effettuare la cifratura dei blocchi;
template <class A, K> class DTBlockCipherFile: derivata da DTBlockCipher specializzata per cifrare i file.
Ciascuna classe ha due costruttori:
DBlockCipher:
DBlockCipher(){ initialize();}
DBlockCipher(int NewMode){ initialize(); Mode = NewMode; }
DTBlockCipher:
DTBlockCipher(): DBlockCipher(){ initialize();}
DTBlockCipher(int NewMode): DBlockCipher(int NewMode){ initialize();}
DTBlockCipherFile:
DTBlockCipherFile(): DTBlockCipher(){ initialize();}
DTBlockCipherFile(int NewMode): DTBlockCipher(int NewMode){ initialize();}
Dove initialize() è una generica funzione che inizializza la classe e int Mode è il modo di cifratura a blocchi (ECB, CBC ecc.).
La riga di codice:
DTBlockCipherFile<DAESAlg, DAESKey> AES(CBC);
//DAESAlg classe che implementa AES
//DAESKey classe che implementa chiavi AES
//CBC è un valore numerico (1) per eseguire la modalità CBC
pensavo che desse luogo alla sequenza di chiamate dei costruttori:
DTBlockCipherFile(CBC) => DTBlockCipher(CBC) => DBlockCipher(CBC)
Invece la sequenza è:
DTBlockCipherFile(CBC) => DTBlockCipher(CBC) => DBlockCipher()
Cosa ho sbagliato? Potete aiutarmi?
Grazie.