FUNZIONE LOGICA: XOR. La funzione logica XOR fornisce un'uscita "vera" solo quando i due ingressi presentano le condizioni logiche opposte. Analogamente, una porta logica XOR fornisce un livello logico "1" solo quando i due ingressi presentano livelli logici opposti. Tabella della Verità Ingresso B Ingresso A Uscita OUT 0 0 0 0 1 1 1 0 1 1 1 0 Lo XOR è un’operatore che permette una facile “criptazione” esempio: char c = ‘a’; // la a ha codice ASCII decimale = 97; Esadecimale = 61; Binario = 01100001; Se eseguiamo lo XOR tra il numero binario che rappresenta la a (1100001) con il numero 11111111 otteniamo: 01100001 xor 11111111 = 10011110 otteniamo il codice decimale 158 – esadecimale 9E Se ora al numero ottenuto ri-applichiamo lo xor otteniamo: 10011110 xor 11111111 = 01100001 il numero binario di partenza……. Vediamo come criptare facilmente il nostro programma per renderlo leggermente più illeggibile 1) Decidiamo quale password utilizzare (esempio: mike) 2) Per ogni carattere andiamo a vedere il codice ASCII: m dec. 109 esa 6D binario 1101101 i dec. 105 esa 69 binario 1101001 k dec. 107 esa 6B binario 1101011 e dec. 101 esa 65 binario 1100101 3) Per ogni numero binario ottenuto facciamo lo XOR con un numero binario casuale (ad. Esempio il numero 16 che in esadecimale è 10 e in binario 10000) che diventerà la nostra chiave per criptare: Otteniamo m dec. 109 esa 6D binario 1101101 XOR 10000 = 1111101 che equivale all’esa 7D i dec. 105 esa 69 binario 1101001 XOR 10000 = 1111001 che equivale all’esa 79 k dec. 107 esa 6B binario 1101011 XOR 10000 = 1111011 che equivale all’esa 7B e dec. 101 esa 65 binario 1100101 XOR 10000 = 1110101 che equivale all’esa 75 4) A questo punto nel programma controlliamo (carattere x carattere) la stringa inserita dall’utente. Dobbiamo però ad ogni carattere della stringa applicare lo Xor con la nostra chiave. Se tutti i caratteri coincidono l’utente avrà accesso alle funzioni del programma…. Oltre ai numeri in notazione decimale (quella comunemente usata) il C accetta anche letterali che denotano numeri interi ottali (base 8) e numeri interi esadecimali (base 16). Per scrivere un numero in notazione ottale basta premettere il carattere 0 (carattere zero) e per scrivere un numero in notazione esadecimale occorre premettere i due caratteri 0x (zero e x). Ad esempio i seguenti letterali sono equivalenti: 75 0113 0x4b // decimale // ottale // esadecimale Essi denotano lo stesso numero: 75 (settantacinque) espresso rispettivamente come numero in base 10, in base 8 e in base 16.