XOR führt kurz vor: XOR ist eine Bitärbitoperation, die durch das Symbol xor oder ^dargestellt wird. Sein Algorithmus besteht darin, für jedes binäre Bit der Zahl auf beiden Seiten des Bedieners denselben Wert auf 0 und 1 zu verwenden.
Ein einfaches Verständnis besteht darin, ohne Tragen hinzuzufügen, z. B. 1+1 = 0, 0+0 = 0, 1+0 = 1.
Anforderung Beschreibung
Die Verschlüsselung von Daten im Informationsalter ist ein sehr wichtiges Thema. Während des Projektprozesses habe ich auch einen relativ komplexen Verschlüsselungsalgorithmus implementiert. Da die beteiligte Technologie jedoch vertraulich ist, habe ich hier eine relativ einfache Version implementiert, indem ich die Dateieingabe- und Ausgabe -Streams und XOR -Vorgänge verwendete, um beliebige Dateien zu verschlüsseln. In Bezug auf den Entschlüsselungsalgorithmus ist er sehr einfach und kann durch den Nachdenken selbst gelöst werden.
Prinzipien der Mathematik
Dieser Verschlüsselungsalgorithmus verwendet die Funktion von zwei Zahlen xor. Lassen Sie uns kurz über das Prinzip von Xor sprechen. XOR ist tatsächlich eine Binärcodierung einer Datei. Einfach ausgedrückt, wenn die beiden binären Bits gleich sind, ist es 0 und nicht gleichzeitig 1. Siehe das folgende Beispiel:
// Binäre Darstellung von 7: 00000111 // Binäre Darstellung von 2: 00000010 // Das Ergebnis des XOR von beiden: 00000101 // Das von der Nummer erhaltene Ergebnis 5//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Code -Implementierung
Java.io importieren. Brief: // Entschlüsselte Datei "); // Erstellen Sie einen Datenkanal, mit dem die Binärdaten des Bildes in FileInputStream input = new FileInputStream (infile) fließen können. Diese Zahl sollte durch eine Art Verschlüsselungsalgorithmus generiert werden. Hier kompile ich einfach eine Nummer 928 (mein Geburtstag), dann eine exklusive oder und geben Sie die erhaltenen Daten int content = 0; // Diese Variable aus, um die Lesedaten zu speichern. Natürlich können hier längere Datentypen wie lange verwendet werden. Natürlich können wir auch andere Datentypen verwenden. Erfüllen Sie die Datentypen an beiden Enden von ^, die zueinander konvertiert werden können. Zumindest kann sie während ((content = input.read ())! -1 ist das Endcharakter der Datei {output.write (content^928); // Schreiben Sie in den Ausgabedateistrom} // die Ressourceneingabe schließen.Codefunktionsbewertung
Für diesen Code kann die Funktion im Grunde den Anforderungen entsprechen, aber es gibt Mängel. Erstens wird der Verschlüsselungsalgorithmus nicht verwendet, um das andere Ende der XOR -Nummer zu generieren, und zweitens habe ich die Entschlüsselung der Datei nicht implementiert. Tatsächlich ist die Entschlüsselung sehr einfach. Bitte lesen Sie das mathematische Prinzipenteil sorgfältig durch und Sie können wissen, wie Sie den Entschlüsselungsalgorithmus schreiben. Tatsächlich werden Verschlüsselung und Entschlüsselung nicht gleichzeitig an derselben Stelle implementiert, die Verschlüsselung wird jedoch unter Verwendung desselben Verschlüsselungsalgorithmus berechnet.
Verbesserter Algorithmus mit zufälligen Zahlen
Im obigen Prozess verwenden wir tatsächlich einen bestimmten Wert, um XOR mit der von uns gelesenen Binärdatei auszuführen. Können wir also eine Zufallszahl verwenden, um diese Konvention zu ersetzen? Die Antwort lautet ja. Zunächst verwenden wir Variablen vom Typ int, um sie zu speichern. Der Bereich, der dargestellt werden kann, ist: plus oder minus 2,1 Milliarden darstellbare Zahlen. Der spezifische Code lautet wie folgt:
// Methoden zur Generierung von zufälligen Zahlen importieren java.util.*; Public class randomTest {public static void main (String [] args) {random random = new random (); int num = random.nextint (11); // Geben Sie an, dass eine Zufallszahl zwischen 0-10 generiert wird. Wir sollten in der Lage sein, die generierte Zufallszahl für Verschlüsselung und Entschlüsseler zu speichern, um System.out.println ("Zufallszahl ist:"+num); }}Verbesserter Verschlüsselungsalgorithmus
Verschlüsselungscode:
Importieren Sie Java.io.*; Importieren Sie Java.util. = Neue Datei ("Treiber: // entschlüsselte Datei"); // Erstellen Sie einen Datenkanal, mit dem die Binärdaten des Bildes in FileInputStream input = new FileInputStream (infile) fließen; FileOutputStream Ausgabe = new FileOutputStream (Outfile); // Eine andere Nummer, die verschlüsselt wurde. wird erzeugt. Wir sollten in der Lage sein, die generierte Zufallszahl für Verschlüsselung und Entschlüsseler zu speichern, um system.out.println ("Zufällige Zahl ist:"+num); // Im Lesungsprozess werden die Lesedaten eine Zahl sein, die durch eine Art von Verschlüsselungsalgorithmus generiert werden sollte. Hier kompile ich einfach eine Nummer 928 (mein Geburtstag) und führe dann XOR durch und gibt die erhaltenen Daten int content = 0; // Diese Variable wird verwendet, um die Lesedaten zu speichern. Natürlich können hier längere Datentypen wie lange verwendet werden. Natürlich können wir auch andere Datentypen verwenden. Wir müssen die Datentypen an beiden Enden von ^ nur erfüllen, um sich gegenseitig zu konvertieren, und zumindest kann die Konvertierung des Typs ausgeführt werden (((content = input.Read.read ())! -1 ist das Endzeichen der Datei {output.write (content^num); // Schreiben Sie in den Ausgabedatei -Stream} // Schließen Sie die Ressourceneingabe.CLOSE (); output.close ();}}Die Verschlüsselungsseite muss die Entschlüsselungsseite der im obigen Code generierten NUM -Seite informieren, andernfalls kann die Entschlüsselung der Datei nicht implementiert werden.
Entschlüsselungscode:
Java.io importieren. Brief: // Entschlüsselte Datei "); // Erstellen Sie einen Datenkanal, mit dem die Binärdaten des Bildes in FileInputStream input = new FileInputStream (infile) fließen können. Diese Zahl sollte durch eine Art Verschlüsselungsalgorithmus generiert werden. Hier kompile ich einfach eine Nummer 928 (mein Geburtstag), dann eine exklusive oder und geben Sie die erhaltenen Daten int content = 0; // Diese Variable aus, um die Lesedaten zu speichern. Natürlich können hier längere Datentypen wie lange verwendet werden. Natürlich können wir auch andere Datentypen verwenden. Erfüllen Sie die Datentypen an beiden Enden von ^, die zueinander konvertiert werden können. Zumindest kann sie während ((content = input.read ())! -1 ist das Endzeichen der Datei {output.write (Inhalt^ verschlüsselte Nummer, die aus dem Verschlüsselungsende übertragen wird); // Schreiben Sie in den Ausgabedateistrom} // Schließen Sie die Ressourceneingabe.CLOSE (); output.close ();}}Wieder verbessert
Tatsächlich sollte in unserem Code der Standardverschlüsselungscode zufällig generiert werden und enthält verschiedene Symbole wie Buchstaben und Zahlen. Wie erzeugen wir also eine solche Verschlüsselungszeichenfolge? Wie konvertiere ich eine solche Verschlüsselungszeichenfolge in Binärcode, nachdem ich ihn generiert hat? Geben Sie eine Idee an: Verwenden von Java -regulären Ausdrücken kann jede gewünschte Zeichenfolge generieren, und verwenden Sie dann die String Conversion -Methode, um den entsprechenden Binärcode zu generieren. Ich habe selbst eine äußerst komplexe Verschlüsselungsgenerierungsmethode implementiert, aber sie kann nicht offengelegt werden. Dies beinhaltet die Informationen von Laborprojekten, und es gibt viele Bereiche der Kryptographie und viele klassische Verschlüsselungsalgorithmen, die ebenfalls verwendet werden können.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die detaillierte Erläuterung des Verschlüsselungsprinzips und die Verwendung einer Datei in Java XOR -Operation. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf diese Seite verweisen:
Java verwendet den XOR -Betrieb, um einfache Verschlüsselungs- und Entschlüsselungsalgorithmus -Instanzcode zu implementieren
Java -Programmierungsimplementierungscode Beispiel für Exor oder Betrieb auf hexadezimalen Zeichenfolgen
XOR -Problemcodeanalyse in Java
Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!