La cifratura XOR è il modo più immediato e semplice per cifrare dei dati. In sostanza, viene applicato l'or esclusivo (XOR) tra ogni carattere e una chiave segreta. Supponete che la chiave sia il carattere %, il codice sorgente e':

 

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

#define chiave '%'


void main()

{

    int carattere_orginale, nuovo_carattere;

    while ((carattere_orginale=getchar())!=EOF)

    {

        nuovo_carattere=carattere_orginale^chiave;

        if (isprint(carattere_orginale)&&isprint(nuovo_carattere))

        {

            putchar(nuovo_carattere);

        }

        else

        {

            putchar(carattere_orginale);

        }

    }

}

Analizziamo il codice passo passo:  abbiamo definito due variabili, nuovo carattere e carattere originale. Carattere originale rappresenta i caratteri che abbiamo immesso da tastiera, nuovo carattere rappresenta i caratteri che verrano stampati a schermo dopo la cifratura. Il ciclo while ci permette di inserire un testo finchè non premiamo invio. 

Il nuovo carattere diventerà un carattere ottenuto dallo XOR effettuato tra il carattere originale e la chiave, definita mediante macro, '%'. 

Il controllo if che potete vedere dopo l'operazione di cifratura, serve per controllare che i caratteri originali e i nuovi caratteri che si stanno per stampare, siano effettivamente stampabili. Ovvero non siano un caratteri di controllo. Effettuare lo XOR su caratteri di controllo potrebbe provocare problemi su alcuni sistemi operativi. 

Questo controllo dunque viene effettuato mediante la funzione isprint() che è definita nell'header ctype.h, notate infatti che ho incluso anche quello. 

 

Se poi volessimo decifrare il messaggio criptato ci basterà applicare lo stesso algoritmo. Ovvero riscriviamo il messaggio criptato e otterremo il messaggio di partenza.