/*Vengono presentati due metodi scritti in Visual C++ che servono a cifrare un messaggio in chiaro
e a decifrare un messaggio cifrato fornendo la chiave. Questi metodi erano inseriti nel codice
di una windows form.*/
/*metodo per la codifica*/
void D_Enc::Encode(CString inChiaro, CString chiave) {
// alfabeto per la chiave ed il messaggio in chiaro CString alfabeto[2]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ
","abcdefghijklmnopqrstuvwxyz "};
// contatore per il messaggio int i;
// valore numerico della lettera da cifrare int pos;
// messaggio cifrato output = "";
// contatore per scandire le lettere del messaggio durante la codifica int count=-1;
// codifica
for (i=0;i<inChiaro.GetLength();i++) { count++;
pos = alfabeto[1].Find(inChiaro[i]);
if (pos==-1)
// i caratteri che non sono nell’alfabeto vengono ripetuti output += inChiaro[i];
else
output += alfabeto[0][( pos +
alfabeto[0].Find(chiave[count%(chiave.GetLength())]))%26];
} }
/* metodo per la decodifica*/
void D_Dec::Decode(CString cifrato,CString chiave) {
// alfabeto per la chiave ed il testo cifrato
CString alfabeto[2]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ
","abcdefghijklmnopqrstuvwxyz "};
// contatore per il cifrato int i;
// valore numerico della lettera da decifrare int pos;
//messaggio in chiaro output = "";
// contatore per decodificare lettera per lettera int count=-1;
// decodifica
for (i=0;i<cifrato.GetLength();i++) { count++;
pos = alfabeto[0].Find(cifrato[i]);
if (pos==-1)
// i caratteri che non sono nell’alfabeto vengono ripetuti output += cifrato[i];
else
output += alfabeto[1][(pos -
alfabeto[0].Find(chiave[count%(chiave.GetLength())]))%(26)];
} }