0
我有一個字符串,其中包含加密的2個字節(16位)ASCII字符。 後來我把它寫入一個文件與此代碼:Android - 寫入/讀取文件的編碼
String result = encrypt("text"); //some encryption method
FileOutputStream fos = new FileOutputStream(filename);
fos.write(result.getBytes("ISO-8859-15"));
fos.flush();
fos.close();
問題是,當我讀文件,將字符串值已經是不同的。 下面是我用它來讀取文件的代碼:
InputStream inputStream = new FileInputStream(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "ISO-8859-15"));
String line;
String txt = "";
while ((line = br.readLine()) != null) txt = txt + line;
我發現字符串TXT比字符串結果已經不同。我甚至提出了一個方法來將字符串中的所有字符的ASCII字符相加,並發現它不同。 我不知道我的錯誤是什麼。請幫忙。
感謝您的回覆。實際上,我前面提到的16位ASCII就像是將** char **改爲** long **。我使用** long **數據類型來處理我的整個加密(因爲我的加密使用256位密鑰,而** byte **數據類型不能處理那麼長)。那麼我應該怎麼做,如果我的加密已經在**長**完成? – falcon
首先,我希望如果你正在編寫自己的加密,那麼這是一個學習練習。加密規則#1不要寫你自己的,除非你是專家。無論如何,加密算法(至少我所知道的所有算法)都是將字節數組作爲輸入和輸出,而不是字符串。這些字節可能包含文本字符串,但該算法在該級別不起作用。您應該在字符串上調用.toByteArray,對數據進行加密,然後將其用作您的密文。在解碼時解碼它,然後再次將該數組轉換爲字符。 –
只要加密工作,我認爲使用** byte [] **或** String **進行加密並不重要。但是在將它寫入文件之前,我應該如何處理字符串密文?如果密文必須是** byte [] **,是不是String.getBytes()已經解決了這個問題?但現實,這不是......我不知道爲什麼。 – falcon