2013-04-12 153 views
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字符相加,並發現它不同。 我不知道我的錯誤是什麼。請幫忙。

回答

1

如果你已經加密了它,你不想把它寫成字符串並應用編碼。我所知道的每種加密方法都將數據視爲一組字節。您需要在加密前和解密後進行任何字符集轉換。在Java中,你甚至不應該把後加密數據作爲一個字符串,它應該是一個字節數組。

另外,沒有16位ASCII這樣的東西。 ASCII是8位。您正在使用某種寬字符數據或16位unicode,而不是ascii。 http://en.wikipedia.org/wiki/ASCII

+0

感謝您的回覆。實際上,我前面提到的16位ASCII就像是將** char **改爲** long **。我使用** long **數據類型來處理我的整個加密(因爲我的加密使用256位密鑰,而** byte **數據類型不能處理那麼長)。那麼我應該怎麼做,如果我的加密已經在**長**完成? – falcon

+0

首先,我希望如果你正在編寫自己的加密,那麼這是一個學習練習。加密規則#1不要寫你自己的,除非你是專家。無論如何,加密算法(至少我所知道的所有算法)都是將字節數組作爲輸入和輸出,而不是字符串。這些字節可能包含文本字符串,但該算法在該級別不起作用。您應該在字符串上調用.toByteArray,對數據進行加密,然後將其用作您的密文。在解碼時解碼它,然後再次將該數組轉換爲字符。 –

+0

只要加密工作,我認爲使用** byte [] **或** String **進行加密並不重要。但是在將它寫入文件之前,我應該如何處理字符串密文?如果密文必須是** byte [] **,是不是String.getBytes()已經解決了這個問題?但現實,這不是......我不知道爲什麼。 – falcon