Tengo que estar en desacuerdo con Karan Bansal aquí. XOR NO genera entropía, simplemente la conserva. Es decir, un Bitvector aleatorio (una cantidad de bits de tamaño fijo) XORed con un Bitvector no aleatorio es igual a un nuevo Bitvector aleatorio. Esta es la base detrás de la aplicación de claves al texto sin formato en la criptografía basada en computadora. Usar el OR simple no funcionaría aquí, ya que no sería posible restaurar el texto sin formato al OR nuevamente, tampoco funcionaría AND:
Sea (0,0,1,1,0) el vector de texto sin formato y (0,1,0,1,1) el vector clave, entonces:
- O: daría como resultado (0, 1, 1, 1, 1) (este es nuestro paso de encriptación), O al volver a desencriptarlo, con la clave, sin embargo, daría como resultado (0, 1, 1, 1, 1) que no es en absoluto lo que era nuestro texto plano originalmente.
- Y: daría como resultado (0, 0, 0, 1, 0), intentemos descifrarlo de nuevo: (0, 0, 0, 1, 0) así que aquí también nuestro texto plano se perdería para siempre.
- XOR: (finalmente) nos da: (0, 1, 1, 0, 1) y aplicarlo nuevamente da como resultado: (0, 0, 1, 1, 0) que nuevamente es nuestro texto plano.
Esas tres son las únicas operaciones a nivel de bit entre dos operandos que existen. Dado que solo XOR tiene las propiedades que necesitamos, es natural que XOR sea muy importante cuando se trata de combinar dos bits entre sí.
- ¿Cuáles son los usos de un espectrofotómetro?
- ¿Ves inteligencia artificial siendo utilizada en una futura misión espacial por la NASA, SpaceX o un equivalente?
- ¿Cuál es el estado de aceptación en una máquina finita determinista?
- ¿Hay científicos trabajando para unir las diversas disciplinas de la ciencia en un solo campo?
- ¿Cuál es la mejor provincia en Canadá para un informático, emprendedor y estudiante de doctorado?
Esta propiedad de XOR puede explotarse para el algoritmo XOR-swap (peligroso, ¡no intentes en el código de producción!), Lo que hace posible intercambiar el contenido de 2 variables sin una tercera variable temporal. :
- dejemos que x e y sean nuestras variables, entonces: x = x XOR y, (es decir, la “nueva” x es el resultado de la antigua x XORed con y),
- y = y XOR x (XOR y con la “nueva” x, desde arriba, lo que originalmente estaba en x ahora está en y),
- y finalmente x = x XOR y (ahora lo que originalmente estaba en y ahora está en x)
Este algoritmo está muy relacionado con el cifrado Feistel, que es solo XORing el texto sin formato y la clave.
Algoritmo de intercambio XOR – Wikipedia
Cifrado Feistel – Wikipedia