我已經研究了這個問題了很多,終於明白了這一點,即加密和解密使用XOR只是不加密建議的方式,但因爲它是一個學術問題,我必須這樣做。如何使用密鑰對字符串進行異或並將其存儲在文件中以稍後解密並使用它?
在我的場景中,我必須將文件(.txt文件)中的java對象(用我們選擇的鍵進行xor加密的空格分隔字符串)一行一行地逐行保存,並在需要時再檢索它們。所以在一個文件中保存一個xor字符串不是一個問題,但是當decrpytion被截斷時。以下是我爲我的項目實施的類似代碼示例。
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爲:」因爲我需要。如果我不拯救我能夠加密和解密正確的文件,但如果我節省了整個字符串字符串到文件並從文件中檢索字符串並解密它不起作用。我認爲它與保存字符串(\ 0保存在行中)有關,但是圍繞這個做了什麼工作。當我從文件讀取時,我不知道字符串的長度。如果這個問題已經得到解答,您可以將我重定向到該問題。
您需要讀取整個文件,而不是一條線,甚至多行,因爲異或你沒有在文後全部;有很多模糊,但一些是文字,所以我建議http://stackoverflow.com/a/326440/2868801。此外,您對字節進行操作,對於UTF-8中需要多個字節的字符不起作用,因此實際上您的代碼只能在ASCII上工作,但您的示例數據是ASCII。 –