XOR è un'operazione che può sempre essere invertita, tutte le informazioni vengono conservate. È così semplice. L'utilizzo di AND e OR può comportare la perdita di informazioni poiché non è possibile stabilire se alcuni bit fossero 1 o 0 negli operandi.
Giocando un po 'con il python repl, useremo 19 ( 10011
) e 5 ( 101
) poiché questi numeri sono buoni esempi.
Usando OR perdi le informazioni su quale degli operandi aveva un certo bit su:
>>> bin(19|5)
'0b10111'
Non è quello 19? Sì, questo è 19. Il numero risultante non può dirci che è stato creato con 5.
Usare AND è lo stesso:
>>> bin(19&5)
'0b1'
Questo è 1. Non c'è modo per noi di recuperare nè il numero (19 o 5) facilmente, abbiamo perso di nuovo le informazioni.
XOR è utile per gli strumenti di crittografia poiché non si perdono informazioni durante XORing:
>>> bin(19^5)
'0b10110'
Questo è 22. Apparentemente questo non ci dice molto, ma vedi questo:
>>> bin(22^5)
'0b10011'
>>> bin(22^19)
'0b101'
Puoi recuperare entrambi i numeri XORando il 22 con l'altro numero. Questa è una concezione molto primitiva di una chiave segreta. Supponendo che tu e qualcun altro possiate avere un enorme elenco di numeri molto grandi e casuali (entrambi avete lo stesso numero), potete semplicemente scambiare messaggi XOR e scambiarli in modo sicuro tra di voi. Finché voi ragazzi usate un numero diverso ogni volta che comunicate questo è un algoritmo sicuro. L'algoritmo è chiamato one time pad .