English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Prinzip und Verwendung der XOR-Technik in Java zur Verschlüsselung beliebiger Dateien

Kurze Einführung in XOR: XOR ist eine auf dem Binärcode basierende Bit-Operation, die mit dem Symbol XOR oder ^ dargestellt wird. Die Operationssätze sind, dass für jede binäre Stelle der beiden Operanden, gleiche Werte 0 und verschiedene Werte1.

einfach gesagt ist das keine Vorzeichenverteilung, wie1+1=0,0+0=0,1+0=0=1.

Beschreibung der Anforderungen

In der Ära der Informationstechnologie ist die Verschlüsselung von Daten ein sehr wichtiger Themenbereich. Während der Projektarbeit habe ich einen relativ komplexen Verschlüsselungsalgorithmus implementiert, aber da die beteiligten Technologien geheim sind, werde ich hier eine einfachere Version implementieren, die die Eingabe- und Ausgabestrom der Datei und den XOR-Operation verwendet, um jede Datei zu verschlüsseln. In Bezug auf den Entschlüsselungsalgorithmus ist es sehr einfach, selbst nachzudenken, um eine Lösung zu finden.

Mathematische Prinzipien

Dieser Verschlüsselungsalgorithmus nutzt die Funktion des XORs von zwei Zahlen. Um es einfacher zu erklären, lass mich die Prinzipien des XOR kurz erläutern. XOR ist im Grunde eine Operation an den binären Codierungen der Datei. Einfach gesagt, wenn zwei binäre Stellen gleich sind, wird 0 genommen, und wenn sie unterschiedlich sind, wird1Sehen Sie sich das folgende Beispiel an:

//7binäres Darstellung:
00000111
//2binäres Darstellung:
00000010
//Das Ergebnis des XORs der beiden:
00000101 //das ist5
//---------------------------
//Das Ergebnis des XORs wird erneut mit2XOR
//5binäres Darstellung:
00000101
//2binäres Darstellung:
00000010
//Das Ergebnis des XORs der beiden:
00000111 //das ist7ist es nicht wieder erstaunlich, dass es zurückgekehrt ist7also?

Umsetzung des Codes

import java.io.*;
class FileSecret
{
	public static void main(String[] args) throws Exception
	 {
		//Finden Sie die Datei, die verschlüsselt werden soll, und legen Sie den Laufwerksbuchstaben selbst fest, die Eingabe- und Ausgabedateien müssen nicht auf demselben Laufwerk sein
		File inFile = new File("Laufwerk:\\verschlüsselte Datei");
		//Der zu verschlüsselnde Datei wird auf das angegebene Laufwerk ausgegeben
		File outFile = new File("Laufwerk:\\entverschlüsselter Datei");
		//Ein Datenkanal wird eingerichtet, um die binären Daten des Bildes einzuführen
		FileInputStream input = new FileInputStream(inFile);
		FileOutputStream output = new FileOutputStream(outFile);
		//Während des Lesens wird das gelesene Daten XOR mit einer Nummer, die durch eine bestimmte Verschlüsselungsalgorithmus generiert werden sollte, hier wird nur eine einfache Nummer erstellt928(mein Geburtstag), dann XOR ausführen und die erhaltenen Daten ausgeben
		int content = 0 ;
		//Diese Variable wird verwendet, um die gelesenen Daten zu speichern. Natürlich können hier längere Datentypen wie long verwendet werden. Natürlich können auch andere Datentypen verwendet werden, solange die Datentypen an den ^-Enden miteinander umgewandelt werden können, mindestens müssen sie in einen强制类型转换 umwandlungsfähig sein
		while((content=input.read())!=})-1) // Wenn das Ende der Datei noch nicht erreicht ist, werden Daten fortlaufend gelesen, und die gelesenen Daten werden in der Variable content gespeichert.-1Für den Dateiende
		{
			output.write(content^928);
			//In die Ausgabestreamdatei schreiben
		}
		//Ressourcen schließen
		input.close();
		output.close();
	}
}

Bewertung der Funktionalität des Codes

Für diesen Code ist die Funktion im Allgemeinen bereits ausreichend, um die Anforderungen zu erfüllen, aber es gibt einige Mängel. Erstens wird keine Verschlüsselungsalgorithmus verwendet, um die andere Seite des XOR zu generieren. Zweitens habe ich die Entschlüsselung des Dateis nicht implementiert. Tatsächlich ist die Entschlüsselung sehr einfach, lesen Sie bitte das mathematische Prinzip sorgfältig durch, um zu verstehen, wie man den Entschlüsselungsalgorithmus schreibt. Tatsächlich werden Verschlüsselung und Entschlüsselung nicht gleichzeitig an derselben Stelle implementiert, sondern werden beide mit dem gleichen Verschlüsselungsalgorithmus berechnet.

Verwendung von Zufallszahlen zur Verbesserung des Algorithmus

Im Verlauf des obigen Prozesses verwenden wir tatsächlich einen gegebenen Wert, um ihn mit der gelesenen Binärdatei zu XOR zu verknüpfen. Können wir diese Vereinbarung durch eine Zufallszahl ersetzen? Die Antwort ist ja, zunächst verwenden wir int-Typ-Variablen, um den Bereich zu speichern: Positiv und Negativ21Billionen von darstellbaren Zahlen, das spezifische Code wie folgt:

//Methode zum Erzeugen von Zufallszahlen
import java.util.*;
public class RandomTest{
 public static void main(String[] args){
  Random random = new Random();
  int num = random.nextInt(11);//stellt 0 dar-10Zwischen den Zufallszahlen, die generierte Zufallszahl sollten wir speichern können, für den Verschlüsselung und Entschlüsselung zu verwenden
  System.out.println("Zufallszahl: "+num);
 }
}

Verbesserte Verschlüsselungsalgorithmus

Code für die Verschlüsselungsebene:

import java.io.*;
import java.util.*;
class FileSecret
{
	public static void main(String[] args) throws Exception
	 {
		//Finden Sie die Datei, die verschlüsselt werden soll, und legen Sie den Laufwerksbuchstaben selbst fest, die Eingabe- und Ausgabedateien müssen nicht auf demselben Laufwerk sein
		File inFile = new File("Laufwerk:\\verschlüsselte Datei");
		//Der zu verschlüsselnde Datei wird auf das angegebene Laufwerk ausgegeben
		File outFile = new File("Laufwerk:\\entverschlüsselter Datei");
		//Ein Datenkanal wird eingerichtet, um die binären Daten des Bildes einzuführen
		FileInputStream input = new FileInputStream(inFile);
		FileOutputStream output = new FileOutputStream(outFile);
		//Erzeugen eines anderen Zufallszahlen für die Verschlüsselung XOR
		Random random = new Random();
		int num = random.nextInt(11);
		//stellt 0 dar-10Zwischen den Zufallszahlen, die generierte Zufallszahl sollten wir speichern können, für den Verschlüsselung und Entschlüsselung zu verwenden
		System.out.println("Zufallszahl: "+num);
		//Während des Lesens wird das gelesene Daten XOR mit einer Nummer, die durch eine bestimmte Verschlüsselungsalgorithmus generiert werden sollte, hier wird nur eine einfache Nummer erstellt928(mein Geburtstag), dann XOR ausführen und die erhaltenen Daten ausgeben
		int content = 0 ;
		//Diese Variable wird verwendet, um die gelesenen Daten zu speichern. Natürlich können hier längere Datentypen wie long verwendet werden. Natürlich können auch andere Datentypen verwendet werden, solange die Datentypen an den ^-Enden miteinander umgewandelt werden können, mindestens müssen sie in einen强制类型转换 umwandlungsfähig sein
		while((content=input.read())!=})-1) // Wenn das Ende der Datei noch nicht erreicht ist, werden Daten fortlaufend gelesen, und die gelesenen Daten werden in der Variable content gespeichert.-1Für den Dateiende
		{
			output.write(content^num);
			//In die Ausgabestreamdatei schreiben
		}
		//Ressourcen schließen
		input.close();
		output.close();
	}
}

Der Verschlüsselungsebene muss die Nummer, die im obigen Code generiert wurde, der Entschlüsselungsebene mitgeteilt werden, andernfalls kann die Datei nicht entsperrt werden.

Code für die Entschlüsselungsebene:

import java.io.*;
class FileSecret
{
	public static void main(String[] args) throws Exception
	 {
		//Finden Sie die Datei, die verschlüsselt werden soll, und legen Sie den Laufwerksbuchstaben selbst fest, die Eingabe- und Ausgabedateien müssen nicht auf demselben Laufwerk sein
		File inFile = new File("Laufwerk:\\verschlüsselte Datei");
		//Der zu verschlüsselnde Datei wird auf das angegebene Laufwerk ausgegeben
		File outFile = new File("Laufwerk:\\entverschlüsselter Datei");
		//Ein Datenkanal wird eingerichtet, um die binären Daten des Bildes einzuführen
		FileInputStream input = new FileInputStream(inFile);
		FileOutputStream output = new FileOutputStream(outFile);
		//Während des Lesens wird das gelesene Daten XOR mit einer Nummer, die durch eine bestimmte Verschlüsselungsalgorithmus generiert werden sollte, hier wird nur eine einfache Nummer erstellt928(mein Geburtstag), dann XOR ausführen und die erhaltenen Daten ausgeben
		int content = 0 ;
		//Diese Variable wird verwendet, um die gelesenen Daten zu speichern. Natürlich können hier längere Datentypen wie long verwendet werden. Natürlich können auch andere Datentypen verwendet werden, solange die Datentypen an den ^-Enden miteinander umgewandelt werden können, mindestens müssen sie in einen强制类型转换 umwandlungsfähig sein
		while((content=input.read())!=})-1) // Wenn das Ende der Datei noch nicht erreicht ist, werden Daten fortlaufend gelesen, und die gelesenen Daten werden in der Variable content gespeichert.-1Für den Dateiende
		{
			output.write(content ^ vom Verschlüsselungsendpunkt übermittelte verschlüsselte Nummer);
			//In die Ausgabestreamdatei schreiben
		}
		//Ressourcen schließen
		input.close();
		output.close();
	}
}

Noch einmal verbessert

Tatsächlich sollte in unserem Code der Standardverschlüsselungsschlüssel zufällig generiert werden und Symbole wie Buchstaben und Ziffern enthalten. Wie können wir so einen Verschlüsselungsschlüssel generieren? Was passiert nach der Generierung des Verschlüsselungsschlüssels, wenn er in Binärcode umgewandelt wird? Bietet eine Überlegung: Mit Java kann ein reguläres Muster verwendet werden, um jede gewünschte Zeichenkette zu generieren, und dann kann der entsprechende Binärcode durch eine String-Konvertierungsmethode generiert werden. Ich habe eine äußerst komplexe Methode zur Generierung von Verschlüsselungsschlüsseln implementiert, aber sie kann nicht öffentlich gemacht werden, da sie sich auf Materialien des Laborprojekts bezieht, und es gibt viele klassische Verschlüsselungsalgorithmen im Bereich der Kryptographie, die ebenfalls genutzt werden können.

Zusammenfassung

Das ist das Ende des Inhalts dieses Artikels über die XOR-Technik in Java, einschließlich der Prinzipien und Verwendung zur Verschlüsselung von Dateien. Hoffentlich ist es für alle nützlich. Interessierte Freunde können weiterhin die Website konsultieren:

Beispielcode für einfache Verschlüsselungs- und Entschlüsselungsalgorithmen mit XOR-Operation in Java

Code-Beispiel für XOR-Operation auf Hexadezimalstrings in Java

Code-Analyse des XOR-Problems in Java

Bitte hinterlassen Sie Ihre Kommentare, wenn Sie etwas verbessern können. Vielen Dank, dass Sie die Unterstützung dieser Website zeigen!

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtlichem Eigentümer. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie verdächtige Urheberrechtsinhalte entdecken, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @, wenn Sie eine E-Mail senden, um zu melden, und fügen Sie relevante Beweise bei. Sobald überprüft, wird die Website den涉嫌侵权的内 容立即删除。)

Gefällt mir