私はこの問題について多くのことを研究し、最終的にこれを理解しました.XORだけを使用した暗号化と復号化は暗号化の推奨方法ではありませんが、学問的な質問であるため、キーで文字列をXORし、ファイルに保存して後で復号化して使用するにはどうすればよいですか?
私のシナリオでは、ファイル(.txtファイル)の行ごとにjavaオブジェクト(xor暗号化をxor暗号化したスペース区切り文字列)を行ごとに保存し、必要に応じて後でそれらを取得する必要があります。だから、xor文字列をファイルに保存することは問題ではありませんが、解読中は切り捨てられます。以下は私のプロジェクトに実装したサンプルコードです。
public class TestingXor {
private static String XorString(String input){
String key = "computing";
Charset charSet = Charset.forName("UTF-8");
byte[] inputBytes = input.getBytes(charSet);
byte[] keyBytes = key.getBytes(charSet);
for(int i=0;i<inputBytes.length;i++){
inputBytes[i] = (byte)(inputBytes[i]^keyBytes[i%keyBytes.length]);
}
return (new String(inputBytes,charSet));
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File testFile = new File("addressBook.txt");
Scanner scanObj = new Scanner(testFile);
String testString = "asd asdasd 07/08/2015 asdasdasd 198546125";
BufferedWriter writer = new BufferedWriter(new FileWriter(testFile));
writer.write(XorString(testString));
writer.close();
System.out.println(XorString(scanObj.nextLine()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上記のコードでは「とASDを」返すところ私は暗号化と適切に復号化することができる午前ファイルを保存していないですが、私は保存していた場合.IF文字列全体を必要とするよう文字列をファイルに追加し、ファイルから文字列を取得し、それを解読することはできません。私はそれが文字列(行の途中で保存されている\ 0)の保存に関連していると思うが、これを回避するのは何ですか。私はファイルから読み込んでいるときに文字列の長さを知らない。この質問に既に回答している場合は、その質問に私をリダイレクトすることができます。
XOR後にテキストがまったくないので、ファイル全体を読む必要があります。多数のダストがありますが、一部はテキスト用ですので、http://stackoverflow.com/a/326440/2868801をお勧めします。また、UTF-8で複数のバイトを必要とする文字では動作しないバイトで動作するので、実際にはコードはASCIIでしか動作しませんが、サンプルデータはASCIIです。 –