XOR은 간단히 소개합니다. 알고리즘은 연산자의 양쪽에있는 숫자의 각 바이너리 비트에 대해 동일한 값과 1에 동일한 값을 사용하는 것입니다.
간단한 이해는 1+1 = 0, 0+0 = 0, 1+0 = 1과 같은 운반없이 추가하는 것입니다.
요구 사항 설명
정보 시대에 데이터를 암호화하는 것은 매우 중요한 주제입니다. 프로젝트를 수행하는 과정에서 비교적 복잡한 암호화 알고리즘도 구현했습니다. 그러나 관련된 기술은 기밀이기 때문에 파일 입력 및 출력 스트림 및 XOR 작업을 사용하여 임의의 파일을 암호화하는 비교적 간단한 버전을 구현했습니다. 암호 해독 알고리즘과 관련하여, 그것은 매우 간단하며 직접 생각하여 해결할 수 있습니다.
수학의 원리
이 암호화 알고리즘은 두 숫자 XOR의 함수를 사용합니다. Xor의 원리에 대해 간단히 이야기 해 봅시다. XOR은 실제로 파일의 이진 인코딩 작업입니다. 간단히 말해서, 두 바이너리 비트가 동일 할 때, 그것은 동시에 1이 아닌 0입니다. 다음 예를 참조하십시오.
// 7 : 00000111의 이진 표현 // 2 : 00000010의 이진 표현 // XOR에 의해 얻은 결과 : 00000101 // 숫자로 얻은 결과. 5//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
코드 구현
import java.io.*; class filesecret {public static void main (string [] args)은 예외를 던지고 {// 드라이브 문자를 직접 지정하고 입력 및 출력은 동일한 드라이브 문자 파일에있을 필요가 없습니다. infile = 새 파일 ( "드라이브 문자 : // 암호화 파일"); 문자 : // 해독 된 파일 "); // 그림의 이진 데이터가 fileInputStream input = new FileInputStream (infile); fileoutputStream output = new FileOutputStream (outFile)으로 유입 될 수 있도록 데이터 채널을 만듭니다. 이 숫자는 일종의 암호화 알고리즘에 의해 생성되어야합니다. 여기서는 단순히 928 (내 생일)을 컴파일 한 다음 독점 또는 획득 된 데이터 int content = 0을 출력 한 다음,이 변수는 읽기 데이터를 저장하는 데 사용됩니다. 물론, 긴 데이터 유형은 여기에서 사용할 수 있습니다. 물론 다른 데이터 유형을 사용할 수도 있습니다. ^의 양쪽 끝에서 서로 변환 할 수있는 데이터 유형을 만족 시키십시오. 적어도 ((content = input.read ())! = -1) // 파일의 끝에 도달하지 않으면 데이터를 계속 읽으면 내용 변수에 저장되었습니다. -1은 파일 {output.write (content^928); // 출력 파일 스트림에 쓰기} // resource input.close (); output.close ()}}의 결말 문자입니다.코드 기능 평가
이 코드의 경우 기능은 기본적으로 요구를 충족시킬 수 있지만 단점이 있습니다. 먼저 암호화 알고리즘은 XOR 번호의 다른 쪽 끝을 생성하는 데 사용되지 않으며, 둘째, 파일의 암호 해독을 구현하지 않았습니다. 실제로 암호 해독은 매우 간단합니다. 수학적 원리 부분을주의 깊게 읽으면 해독 알고리즘을 작성하는 방법을 알 수 있습니다. 실제로 암호화 및 암호 해독은 동시에 동시에 구현되지 않지만 동일한 암호화 알고리즘을 사용하여 암호화가 계산됩니다.
랜덤 숫자를 사용하여 개선 된 알고리즘
위의 프로세스에서는 실제로 주어진 값을 사용하여 읽은 이진 파일로 XOR을 수행합니다. 그렇다면이 컨벤션을 대체하기 위해 임의의 숫자를 사용할 수 있습니까? 대답은 예입니다. 우선, 우리는 유형의 변수를 사용하여 저장합니다. 표현할 수있는 범위는 다음과 같습니다. 플러스 또는 마이너스 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)은 예외를 던져 {// 드라이브 문자를 직접 지정하고 입력 및 출력은 동일한 드라이브 문자 파일 = 새 파일에있을 필요가 없습니다. Outfile = 새 파일 ( "드라이버 : // 해독 된 파일"); // 그림의 이진 데이터가 fileInputStream input = new FileInputStream (infile)으로 흐를 수 있도록 데이터 채널을 만듭니다. fileOutputStream = new FileOutputStream (Outfile); // random.nextint (11); int random.next (11); 0과 10 사이의 숫자가 생성됩니다. 우리는 암호화 및 해독제가 System.out.println을 사용하기 위해 생성 된 임의의 숫자를 저장할 수 있어야합니다 ( "랜덤 숫자는 :"+num); // 읽기 과정에서 읽기 데이터는 숫자가되며 어떤 종류의 암호화 알고리즘에 의해 생성되어야합니다. 여기서 나는 단순히 숫자 928 (내 생일)을 컴파일 한 다음 XOR을 수행 한 다음 얻은 데이터 int content = 0을 출력합니다. //이 변수는 읽기 데이터를 저장하는 데 사용됩니다. 물론, 긴 데이터 유형은 여기에서 사용할 수 있습니다. 물론 다른 데이터 유형을 사용할 수도 있습니다. 우리는 서로 변환하기 위해 ^의 양쪽 끝에있는 데이터 유형을 만족시키기 만하면, 적어도 캐스트 유형 변환은 ((content = input.read ())! = -1) // 파일의 끝에 도달하지 않으면 데이터를 계속 읽고 내용 변수에 읽은 데이터가 계속 저장되었습니다. -1은 파일 {output.write (content^num); // 출력 파일 스트림에 쓰기}의 끝 문자입니다.암호화 측면은 상기 코드에서 생성 된 NUM의 암호 해독 측에 알릴 필요가 있으며, 그렇지 않으면 파일의 암호 해독을 구현할 수 없습니다.
암호 해독 코드 :
import java.io.*; class filesecret {public static void main (string [] args)은 예외를 던지고 {// 드라이브 문자를 직접 지정하고 입력 및 출력은 동일한 드라이브 문자 파일에있을 필요가 없습니다. infile = 새 파일 ( "드라이브 문자 : // 암호화 파일"); 문자 : // 해독 된 파일 "); // 그림의 이진 데이터가 fileInputStream input = new FileInputStream (infile); fileoutputStream output = new FileOutputStream (outFile)으로 유입 될 수 있도록 데이터 채널을 만듭니다. 이 숫자는 일종의 암호화 알고리즘에 의해 생성되어야합니다. 여기서는 단순히 928 (내 생일)을 컴파일 한 다음 독점 또는 획득 된 데이터 int content = 0을 출력 한 다음,이 변수는 읽기 데이터를 저장하는 데 사용됩니다. 물론, 긴 데이터 유형은 여기에서 사용할 수 있습니다. 물론 다른 데이터 유형을 사용할 수도 있습니다. ^의 양쪽 끝에서 서로 변환 할 수있는 데이터 유형을 만족 시키십시오. 적어도 ((content = input.read ())! = -1) // 파일의 끝에 도달하지 않으면 데이터를 계속 읽으면 내용 변수에 저장되었습니다. -1은 파일 {output.write (암호화 끝에서 전송 된 content^ 암호화 번호); // 출력 파일 스트림에 쓰기} // resource input.close (); output.close ();}}의 끝 문자입니다.다시 개선
실제로, 우리 코드에서 표준 암호화 코드는 무작위로 생성되어야하며 문자 및 숫자와 같은 다양한 기호를 포함합니다. 그렇다면 어떻게 그러한 암호화 문자열을 생성합니까? 이러한 암호화 문자열을 생성 한 후 이진 코드로 어떻게 변환합니까? 아이디어 제공 : Java 정규식을 사용하면 원하는 문자열을 생성 한 다음 문자열 변환 방법을 사용하여 해당 이진 코드를 생성 할 수 있습니다. 매우 복잡한 암호화 생성 방법을 직접 구현했지만 공개 할 수는 없습니다. 여기에는 실험실 프로젝트의 정보가 포함되며, 많은 암호화 분야와 사용할 수있는 많은 고전적인 암호화 알고리즘이 있습니다.
요약
위의 내용은 암호화 원칙에 대한 자세한 설명 및 Java XOR 작동에서 모든 파일 사용에 대한이 기사의 모든 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구들은이 사이트를 계속 참조 할 수 있습니다.
Java는 XOR 작동을 사용하여 간단한 암호화 및 암호 해독 알고리즘 인스턴스 코드를 구현합니다.
Java 프로그래밍 구현 코드 exor 또는 16 진 문자열 작동의 예제 예제
Java의 XOR 문제 코드 분석
단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!