XORは簡単に紹介します:XORは、シンボルXORまたは ^で表されるバイナリベースのビット操作です。そのアルゴリズムは、演算子の両側の数値の各バイナリビットに対して、同じ値を0と1に使用することです。
簡単な理解は、1+1 = 0、0+0 = 0、1+0 = 1など、運ばずに追加することです。
要件の説明
情報年齢のデータを暗号化することは非常に重要なトピックです。プロジェクトを実行する過程で、比較的複雑な暗号化アルゴリズムも実装しました。ただし、関係するテクノロジーは機密であるため、ここでは比較的単純なバージョンを実装して、ファイル入力と出力ストリームとXOR操作を使用して任意のファイルを暗号化しました。復号化アルゴリズムに関しては、それは非常に単純であり、自分でそれについて考えることで解決できます。
数学の原則
この暗号化アルゴリズムは、2つの数字xorの関数を使用します。 Xorの原則について簡単に説明しましょう。 Xorは実際には、ファイルのバイナリエンコードの操作です。簡単に言えば、2つのバイナリビットが同じ場合、それは0であり、同時に1ではありません。次の例を参照してください。
// 7:00000111 // 2:00000010のバイナリ表現のバイナリ表現//両方のXORによって得られた結果:00000101 // 5//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
コード実装
java.io。*; class filesecret {public static void main(string [] args)スロー例外{//ドライブ文字を自分で指定するファイルを見つけ、入力と出力は同じドライブファイルにある必要はありません。文字://復号化されたファイル "); //データチャネルを作成して、画像のバイナリデータがFileInputStream input = new fileInputStream(infile); fileoutputStream output = new fileoutputStream(outfile); //読み取りプロセスで、読み取りデータxorは数字です。この数値は、何らかの暗号化アルゴリズムによって生成される必要があります。ここでは、数字928(私の誕生日)をコンパイルしてから、排他的または、取得したデータintコンテンツ= 0を出力するだけです。//この変数は読み取りデータの保存に使用されます。もちろん、ここでは長いなどの長いデータ型を使用できます。もちろん、他のデータ型も使用できます。互いに変換できる ^の両端のデータ型を満たすだけで、少なくとも(content = input.read())!= -1)//ファイルの終了に到達しない場合、データの読み取りを続け、読み取りデータがコンテンツ変数に保存されている場合にキャストできます。 -1はファイルの終了文字{output.write(content^928); //出力ファイルストリームに書き込みます} //リソース入力を閉じます。コード関数の評価
このコードでは、関数は基本的にニーズを満たすことができますが、欠点があります。第一に、暗号化アルゴリズムはXOR番号の反対側を生成するために使用されず、次に、ファイルの復号化を実装しませんでした。実際、復号化は非常に単純です。数学の原理の部分を注意深く読んでください。復号化アルゴリズムの書き方を知ることができます。実際、暗号化と復号化は同じ場所で同時に実装されていませんが、暗号化は同じ暗号化アルゴリズムを使用して計算されます。
乱数を使用したアルゴリズムの改善
上記のプロセスでは、特定の値を使用して、読み取ったバイナリファイルでXORを実行します。では、この条約を置き換えるために乱数を使用できますか?答えはイエスです。まず第一に、タイプINTの変数を使用してそれらを保存します。表現できる範囲は、プラスまたはマイナス21億の表現可能な数字です。特定のコードは次のとおりです。
//乱数を生成する方法Java.util。*; public class randomTest {public static void main(string [] args){random = new Random(); int num = random.nextint(11); // 0-10の間の乱数が生成されたことを示します。暗号化と復号化因子の生成された乱数を保存してSystem.out.println( "乱数IS:"+num); }}暗号化アルゴリズムの改善
暗号化コード:
java.io。*;インポートJava.util。*; class filesecret {public static void main(string [] args)throws exception {//ドライブ文字を自分で指定するファイルを見つけ、入力と出力は同じドライブ文字ファイルInfile = new pile "); outFile = new File("Driver://decrypted file");//Create a data channel to allow the binary data of the picture to flow into FileInputStream input = new FileInputStream(inFile);FileOutputStream output = new FileOutputStream(outFile);//Another number that generates encrypted XOR Random random = new Random();int num = random.nextint(11);//Denotes that a random number 0〜10の間で生成されます。生成された乱数を暗号化と復号化因子を使用してsystem.out.println( "+num); //読み取りプロセスでは、読み取りデータはXOR数になります。ここでは、数字928(私の誕生日)をコンパイルしてからXORを実行し、取得したデータint Content = 0; //この変数を使用して読み取りデータを保存するだけです。もちろん、ここでは長いなどの長いデータ型を使用できます。もちろん、他のデータ型も使用できます。互いに変換するために ^の両端のデータ型を満たすだけで、少なくともキャスト型変換は実行できます。 -1はファイルの終了文字です{output.write(content^num); //出力ファイルストリームに書き込み} //リソース入力を閉じます。暗号化側は、上記のコードで生成された数値の復号化側を通知する必要があります。そうしないと、ファイルの復号化を実装できません。
復号化コード:
java.io。*; class filesecret {public static void main(string [] args)スロー例外{//ドライブ文字を自分で指定するファイルを見つけ、入力と出力は同じドライブファイルにある必要はありません。文字://復号化されたファイル "); //データチャネルを作成して、画像のバイナリデータがFileInputStream input = new fileInputStream(infile); fileoutputStream output = new fileoutputStream(outfile); //読み取りプロセスで、読み取りデータxorは数字です。この数値は、何らかの暗号化アルゴリズムによって生成される必要があります。ここでは、数字928(私の誕生日)をコンパイルしてから、排他的または、取得したデータintコンテンツ= 0を出力するだけです。//この変数は読み取りデータの保存に使用されます。もちろん、ここでは長いなどの長いデータ型を使用できます。もちろん、他のデータ型も使用できます。互いに変換できる ^の両端のデータ型を満たすだけで、少なくとも(content = input.read())!= -1)//ファイルの終了に到達しない場合、データの読み取りを続け、読み取りデータがコンテンツ変数に保存されている場合にキャストできます。 -1はファイルの端の文字です{output.write(content^暗号化された暗号化番号から送信された数字); //出力ファイルストリームに書き込み} //リソース入力を閉じます。再び改善しました
実際、コードでは、標準の暗号化コードをランダムに生成し、文字や数字などのさまざまなシンボルを含む必要があります。では、そのような暗号化文字列をどのように生成するのでしょうか?このような暗号化文字列を生成した後、このような暗号化文字列をバイナリコードに変換するにはどうすればよいですか?アイデアを提供する:Javaの正規表現を使用すると、必要な文字列を生成し、文字列変換方法を使用して対応するバイナリコードを生成します。私は非常に複雑な暗号化生成方法を自分で実装しましたが、開示することはできません。これには、実験室プロジェクトの情報が含まれ、暗号化の多くの分野と使用できる多くの古典的な暗号化アルゴリズムがあります。
要約します
上記は、暗号化の原則の詳細な説明とJava XOR操作のファイルの使用に関するすべての内容です。私はそれが誰にでも役立つことを願っています。興味のある友達は引き続きこのサイトを参照できます:
JavaはXOR操作を使用して、単純な暗号化と復号化アルゴリズムインスタンスコードを実装します
Javaプログラミングの実装コードexorの例または16進列の操作
JavaのXOR問題コード分析
欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!