Xor presenta brevemente: Xor es una operación de bits basada en binaria, representada por el símbolo Xor o ^. Su algoritmo es usar el mismo valor a 0 y 1 para cada bit binario del número en ambos lados del operador.
Una comprensión simple es agregar sin transportar, como 1+1 = 0, 0+0 = 0, 1+0 = 1.
Descripción del requisito
Cifrar datos en la era de la información es un tema muy importante. Durante el proceso de hacer el proyecto, también implementé un algoritmo de cifrado relativamente complejo. Sin embargo, dado que la tecnología involucrada es confidencial, implementé una versión relativamente simple aquí, utilizando las transmisiones de entrada y salida de archivo y las operaciones XOR para cifrar archivos arbitrarios. Con respecto al algoritmo de descifrado, es muy simple y se puede resolver pensando en ello usted mismo.
Principios de las matemáticas
Este algoritmo de cifrado utiliza la función de dos números XOR. Hablemos brevemente sobre el principio de Xor. Xor es en realidad una operación de codificación binaria de un archivo. En pocas palabras, cuando los dos bits binarios son iguales, es 0 y no 1 al mismo tiempo. Vea el siguiente ejemplo:
// representación binaria de 7: 00000111 // representación binaria de 2: 0000000010 // El resultado obtenido por el XOR de ambos: 00000101 // el resultado obtenido por el número 5 // ---------------------------------------------------------------------------------------------------------------------------------------------------
Implementación del código
import java.io.*; class FileseCret {public static void main (string [] args) lanza la excepción {// Encuentra el archivo para estar encriptado, especifique la carta de la unidad usted mismo, y la entrada y salida no necesitan estar en el mismo archivo de letra del archivo de la unidad, "archivo nuevo (" Letra de unidad: // archivo encriptado "); // Salida que se encriende al archivo de la letra de la unidad letra: // archivo descifrado "); // Cree un canal de datos para permitir que los datos binarios de la imagen fluyan a FileInputStream input = new FileInputStream (infile); FileOutputStream Output = new FileOutputStream (OutFile); // En proceso de lectura, los datos de lectura XOR es un número. Este número debe ser generado por algún tipo de algoritmo de cifrado. Aquí simplemente compilo un número 928 (mi cumpleaños), luego realizo un exclusivo OR, y envío los datos obtenidos int content = 0; // Esta variable se usa para almacenar los datos de lectura. Por supuesto, aquí se pueden usar tipos de datos más largos como largo. Por supuesto, también podemos usar otros tipos de datos. Simplemente satisfaga los tipos de datos en ambos extremos de ^ que se pueden convertir entre sí, al menos se puede emitir mientras ((content = input.read ())! =-1) // Si no se alcanza el final del archivo, luego continúe leyendo los datos, y los datos de lectura se han almacenado en la variable de contenido. -1 es el carácter final del archivo {output.write (content^928); // Escribir en la transmisión del archivo de salida} // Cierre el recurso input.close (); output.close ();}}Evaluación de la función del código
Para este código, la función básicamente puede satisfacer las necesidades, pero hay deficiencias. Primero, el algoritmo de cifrado no se usa para generar el otro extremo del número XOR, y segundo, no implementé el descifrado del archivo. De hecho, el descifrado es muy simple. Lea cuidadosamente la parte del principio matemático y puede saber cómo escribir el algoritmo de descifrado. De hecho, el cifrado y el descifrado no se implementan al mismo tiempo en el mismo lugar, pero el cifrado se calcula utilizando el mismo algoritmo de cifrado.
Algoritmo mejorado usando números aleatorios
En el proceso anterior, en realidad usamos un valor dado para realizar XOR con el archivo binario que leemos. Entonces, ¿podemos usar un número aleatorio para reemplazar esta convención? La respuesta es sí. En primer lugar, utilizamos variables de tipo int para almacenarlas. El rango que se puede representar es: más o menos 2.100 millones de números representables. El código específico es el siguiente:
// Los métodos para generar números aleatorios importan java.util.*; Public class RandomTest {public static void main (string [] args) {random random = new Random (); int num = random.nextint (11); // indica que se genera un número aleatorio entre 0-10. Deberíamos poder guardar el número aleatorio generado para el cifrado y los descifrores para usar System.out.println ("El número aleatorio es:"+num); }}Algoritmo de cifrado mejorado
Código de cifrado:
import java.io.*; import java.util.*; class Silsecret {public static void main (string [] args) lanza la excepción {// Encuentra el archivo para estar encriptado, especifique la letra de la unidad usted mismo, y la entrada y la salida no necesitan estar en el mismo archivo de la letra de la unidad de la letra de la letra. = nuevo archivo ("controlador: // archivo descifrado"); // Cree un canal de datos para permitir que los datos binarios de la imagen fluyan a fileInputStream input = new FileInputStream (infile); fileOutputStream salida = new FileOutPutStream (outFile); // Otro número que genera cifrendido xor aleatorio = new Random (int num = Random.nextint (11); ////////////1 numero que genera cifricado xor aleatorio = nuevo aleatorio (); int num = aleator.nextint (11); //////////////1 número de 0. se genera. Deberíamos poder guardar el número aleatorio generado para el cifrado y los descifrados para usar System.out.println ("El número aleatorio es:"+num); // En el proceso de lectura, los datos de lectura serán un número, que debe generarse mediante algún tipo de algoritmo de cifrado. Aquí simplemente compilo un número 928 (mi cumpleaños), y luego realizo XOR, y emitirá los datos obtenidos int content = 0; // Esta variable se usa para almacenar los datos de lectura. Por supuesto, aquí se pueden usar tipos de datos más largos como largo. Por supuesto, también podemos usar otros tipos de datos. Solo necesitamos satisfacer los tipos de datos en ambos extremos de ^ para convertirse entre sí, y al menos se puede realizar una conversión de tipo de reparto mientras ((content = input.read ())! =-1) // Si no se alcanza el final del archivo, continúe leyendo los datos, y los datos de lectura se han almacenado en la variable de contenido. -1 es el carácter final del archivo {output.write (content^num); // Escribir en la transmisión del archivo de salida} // cerrar el recurso input.close (); output.close ();}}El lado de cifrado debe informar el lado de descifrado del NUM generado en el código anterior, de lo contrario el descifrado del archivo no se puede implementar.
Código de descifrado:
import java.io.*; class FileseCret {public static void main (string [] args) lanza la excepción {// Encuentra el archivo para estar encriptado, especifique la carta de la unidad usted mismo, y la entrada y salida no necesitan estar en el mismo archivo de letra del archivo de la unidad, "archivo nuevo (" Letra de unidad: // archivo encriptado "); // Salida que se encriende al archivo de la letra de la unidad letra: // archivo descifrado "); // Cree un canal de datos para permitir que los datos binarios de la imagen fluyan a FileInputStream input = new FileInputStream (infile); FileOutputStream Output = new FileOutputStream (OutFile); // En proceso de lectura, los datos de lectura XOR es un número. Este número debe ser generado por algún tipo de algoritmo de cifrado. Aquí simplemente compilo un número 928 (mi cumpleaños), luego realizo un exclusivo OR, y envío los datos obtenidos int content = 0; // Esta variable se usa para almacenar los datos de lectura. Por supuesto, aquí se pueden usar tipos de datos más largos como largo. Por supuesto, también podemos usar otros tipos de datos. Simplemente satisfaga los tipos de datos en ambos extremos de ^ que se pueden convertir entre sí, al menos se puede emitir mientras ((content = input.read ())! =-1) // Si no se alcanza el final del archivo, luego continúe leyendo los datos, y los datos de lectura se han almacenado en la variable de contenido. -1 es el carácter final del archivo {output.write (contenido^ número encriptado transmitido desde el extremo de cifrado); // Escriba a la secuencia de archivo de salida} // Cierre el recurso input.close (); output.close ();}}Mejoró de nuevo
De hecho, en nuestro código, el código de cifrado estándar debe generarse aleatoriamente y contiene varios símbolos, como letras y números. Entonces, ¿cómo generamos tal cadena de cifrado? ¿Cómo convierto tal cadena de cifrado en código binario después de generarlo? Proporcione una idea: el uso de expresiones regulares de Java puede generar cualquier cadena que desee, y luego use el método de conversión de cadenas para generar el código binario correspondiente. Yo mismo he implementado un método de generación de cifrado extremadamente complejo, pero no se puede revelar. Esto implica la información de proyectos de laboratorio, y hay muchos campos de criptografía y muchos algoritmos de cifrado clásicos que también se pueden usar.
Resumir
Lo anterior es todo el contenido de este artículo sobre la explicación detallada del principio de cifrado y el uso de cualquier archivo en la operación Java XOR. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a este sitio:
Java utiliza la operación XOR para implementar el código de instancia de algoritmo de cifrado y descifrado simple
Código de implementación de programación Java Ejemplo de Exor u operación en cadenas hexadecimales
Análisis del código de problema XOR en Java
Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!