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

Java XOR 기술로 파일에 대한 암호화 원리 및 사용 방법 상세 설명

XOR 간단 소개: XOR는 이진 기반의 비트 연산으로, XOR 또는 ^ 기호로 표시됩니다. 연산 규칙은 연산자의 양쪽의 각 이진 비트에 대해 동일한 값이면 0, 다른 값이면 1을 가져옵니다.1

간단히 이해하면 불进位 추가는 다음과 같습니다.1+1=0,0+0=0,1+0=0=1

요구 사항 설명

정보화 시대에 데이터를 암호화하는 것은 매우 중요한 주제입니다. 프로젝트를 진행하는 과정에서 저는 비교적 복잡한 암호화 알고리즘을 구현했지만, 기술이 비밀로 되어 있어 여기서는 비교적 간단한 버전을 구현했습니다. 파일의 입력/출력 스트림과 XOR 연산을 사용하여 어떤 파일도 암호화할 수 있습니다. 복호화 알고리즘은 매우 간단합니다. 자신이 생각해 보면 해결할 수 있습니다.

수학 원리

이 암호화 알고리즘은 두 수의 XOR 기능을 사용하고 있습니다. 간단히 말해서 XOR의 원리를 설명드리겠습니다. XOR는 실제로 파일의 이진 코드를 처리하는 것입니다. 간단히 말해서 두 이진 비트가 같으면 0이고, 다를 때 1입니다.1아래 예제를 보세요:

//7의 이진 표현:
00000111
//2의 이진 표현:
00000010
//둘 중 하나와 XOR 연산된 결과:
00000101 //즉5
//---------------------------
//연산된 결과를 다시2XOR
//5의 이진 표현:
00000101
//2의 이진 표현:
00000010
//둘 중 하나와 XOR 연산된 결과:
00000111 //즉7그리고 매우 기이하게 다시 돌아왔습니다7그렇지 않나요?

코드 구현

import java.io.*;
class FileSecret
{
	public static void main(String[] args) throws Exception
	 {
		//암호화할 파일을 찾습니다. 드라이브는 자신이 지정하며, 입력 및 출력은 같은 드라이브에 있지 않아야 합니다
		File inFile = new File("드라이브:\\암호화된 파일");
		//암호화할 파일을 지정된 드라이브에 출력합니다
		File outFile = new File("드라이브:\\해석된 파일");
		//데이터 채널을 구축하여 이미지의 이진 데이터가 흐를 수 있게 합니다
		FileInputStream input = new FileInputStream(inFile);
		FileOutputStream output = new FileOutputStream(outFile);
		//읽는 동안, 읽은 데이터에 특정 숫자를 XOR합니다. 이 숫자는 어떤 암호화 알고리즘에서 생성된 것으로 보이며, 여기서는 간단히 숫자를 만듭니다928(나의 생일),그런 다음 XOR를 수행하고, 얻은 데이터를 출력합니다
		int content = 0 ;
		//이 변수는 읽은 데이터를 저장하는 데 사용되며, 물론 여기서는 long와 같은 더 긴 데이터 타입을 사용할 수 있으며, 다른 데이터 타입도 사용할 수 있습니다. 중요한 것은 ^ 양 끝의 데이터 타입이 서로 변환될 수 있어야 한다는 것입니다. 최소한 강제 타입 변환을 할 수 있어야 합니다.
		while((content=input.read())!=-1) // 파일의 끝에 도달하지 않았다면, 계속 데이터를 읽고, 읽은 데이터는 content 변수에 저장됩니다.-1파일의 끝 마커
		{
			output.write(content^928);
			//출력 파일 스트림에 쓰기
		}
		//자원을 닫습니다
		input.close();
		output.close();
	}
}

코드 기능 평가

이 코드는 기능적으로 요구 사항을 충족시키고 있지만, 몇 가지 단점이 있습니다. 첫째, XOR 연산의 다른 쪽 숫자를 암호화 알고리즘을 사용하지 않았습니다. 둘째, 파일의 복호화를 구현하지 않았습니다. 실제로 복호화는 매우 간단합니다. 수학 원리 부분을 자세히 읽으면 복호화 알고리즘을 작성하는 방법을 알 수 있습니다. 사실 암호화와 복호화는 동시에 같은 곳에서 구현되지 않습니다. 대신, 암호화는 동일한 암호화 알고리즘을 사용하여 연산된 결과를 기반으로 합니다.

랜덤 수를 사용하여 알고리즘을 개선하다

위의 과정에서 우리는 실제로 주어진 값을 읽은 이진 파일과 XOR 연산을 사용하고 있습니다. 이를 랜덤 수로 대체할 수 있을까요? 답은 예입니다. 먼저 우리는 int 타입의 변수를 사용하여 저장하며, 표현할 수 있는 범위는 양수와 음수입니다.21억의 가능한 숫자를 나타냅니다. 구체적인 코드는 다음과 같습니다.

//임의 숫자 생성 방법
import java.util.*;
public class RandomTest{
 public static void main(String[] args){
  Random random = new Random();
  int num = random.nextInt(11);//0을 나타냅니다-10사이의 임의 숫자를 생성하면, 생성된 이 임의 숫자를 저장하여 암호화 및 해석자가 사용할 수 있어야 합니다
  System.out.println("임의의 숫자: "+num);
 }
}

개선된 암호화 알고리즘

암호화단 콘트롤 코드:

import java.io.*;
import java.util.*;
class FileSecret
{
	public static void main(String[] args) throws Exception
	 {
		//암호화할 파일을 찾습니다. 드라이브는 자신이 지정하며, 입력 및 출력은 같은 드라이브에 있지 않아야 합니다
		File inFile = new File("드라이브:\\암호화된 파일");
		//암호화할 파일을 지정된 드라이브에 출력합니다
		File outFile = new File("드라이브:\\해석된 파일");
		//데이터 채널을 구축하여 이미지의 이진 데이터가 흐를 수 있게 합니다
		FileInputStream input = new FileInputStream(inFile);
		FileOutputStream output = new FileOutputStream(outFile);
		//암호화 XOR의 또 다른 숫자를 생성합니다
		Random random = new Random();
		int num = random.nextInt(11);
		//0을 나타냅니다-10사이의 임의 숫자를 생성하면, 생성된 이 임의 숫자를 저장하여 암호화 및 해석자가 사용할 수 있어야 합니다
		System.out.println("임의의 숫자: "+num);
		//읽는 동안, 읽은 데이터에 특정 숫자를 XOR합니다. 이 숫자는 어떤 암호화 알고리즘에서 생성된 것으로 보이며, 여기서는 간단히 숫자를 만듭니다928(나의 생일),그런 다음 XOR를 수행하고, 얻은 데이터를 출력합니다
		int content = 0 ;
		//이 변수는 읽은 데이터를 저장하는 데 사용되며, 물론 여기서는 long와 같은 더 긴 데이터 타입을 사용할 수 있으며, 다른 데이터 타입도 사용할 수 있습니다. 중요한 것은 ^ 양 끝의 데이터 타입이 서로 변환될 수 있어야 한다는 것입니다. 최소한 강제 타입 변환을 할 수 있어야 합니다.
		while((content=input.read())!=-1) // 파일의 끝에 도달하지 않았다면, 계속 데이터를 읽고, 읽은 데이터는 content 변수에 저장됩니다.-1파일의 끝 마커
		{
			output.write(content^num);
			//출력 파일 스트림에 쓰기
		}
		//자원을 닫습니다
		input.close();
		output.close();
	}
}

암호화단은 위 코드에서 생성된 num을 해석단에 알려야 하며, 그렇지 않으면 파일의 해석을 수행할 수 없습니다.

해석단 콘트롤 코드:

import java.io.*;
class FileSecret
{
	public static void main(String[] args) throws Exception
	 {
		//암호화할 파일을 찾습니다. 드라이브는 자신이 지정하며, 입력 및 출력은 같은 드라이브에 있지 않아야 합니다
		File inFile = new File("드라이브:\\암호화된 파일");
		//암호화할 파일을 지정된 드라이브에 출력합니다
		File outFile = new File("드라이브:\\해석된 파일");
		//데이터 채널을 구축하여 이미지의 이진 데이터가 흐를 수 있게 합니다
		FileInputStream input = new FileInputStream(inFile);
		FileOutputStream output = new FileOutputStream(outFile);
		//읽는 동안, 읽은 데이터에 특정 숫자를 XOR합니다. 이 숫자는 어떤 암호화 알고리즘에서 생성된 것으로 보이며, 여기서는 간단히 숫자를 만듭니다928(나의 생일),그런 다음 XOR를 수행하고, 얻은 데이터를 출력합니다
		int content = 0 ;
		//이 변수는 읽은 데이터를 저장하는 데 사용되며, 물론 여기서는 long와 같은 더 긴 데이터 타입을 사용할 수 있으며, 다른 데이터 타입도 사용할 수 있습니다. 중요한 것은 ^ 양 끝의 데이터 타입이 서로 변환될 수 있어야 한다는 것입니다. 최소한 강제 타입 변환을 할 수 있어야 합니다.
		while((content=input.read())!=-1) // 파일의 끝에 도달하지 않았다면, 계속 데이터를 읽고, 읽은 데이터는 content 변수에 저장됩니다.-1파일의 끝 마커
		{
			output.write(content^암호화 단계에서 전달된 암호화 숫자);
			//출력 파일 스트림에 쓰기
		}
		//자원을 닫습니다
		input.close();
		output.close();
	}
}

다시 한 번 개선

실제로 우리의 코드에서는, 표준 암호화 문자열은 무작위로 생성되어야 하며, 문자, 숫자 및 다양한 기호를 포함해야 합니다. 그런 문자열을 어떻게 생성하죠? 이러한 암호화 문자열을 생성한 후에는 어떻게 이를 이진 코드로 변환하죠? 한 가지 아이디어를 제공합니다: Java 정규 표현식을 사용하여 원하는 문자열을 생성할 수 있습니다. 그런 다음 문자열 변환 메서드를 사용하여 해당 이진 코드를 생성할 수 있습니다. 저는 매우 복잡한 암호화 생성 방법을 구현했지만, 공개할 수 없습니다. 이는 연구실 프로젝트 자료와 관련이 있으며, 많은 암호학 분야의 고전적인 암호화 알고리즘을 활용할 수도 있습니다.

정리

이것이 Java XOR 기술의 원리와 파일 암호화 및 사용에 대한 전체 내용입니다. 모두에게 도움이 되길 바랍니다. 관심이 있는 친구들은 이 사이트를 계속 참조할 수 있습니다:

Java에서 XOR 연산을 사용하여 간단한 암호화 및 복호화 알고리즘 예제 코드

Java 프로그래밍이 실제로 16진수 문자열 XOR 연산을 수행하는 코드 예제

Java에서의 XOR 문제 코드 분석

불충분한 부분이 있으면留言를 통해 지적해 주시기 바랍니다. 친구들이 이 사이트를 지지해 주셔서 감사합니다!

고지사항: 이 문서의 내용은 인터넷에서 가져온 것이며, 저작권자가 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공적으로 편집되지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 있는 내용을 발견하면 메일을 발송하여 notice#w로 신고하십시오.3codebox.com(메일을 보내면, #을 @으로 변경하십시오. 신고하고 관련 증거를 제공하시면, 사실이 확인되면 이 사이트는 즉시 의심스러운 저작권 내용을 삭제합니다。)

추천 합니다