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.