2013-04-12 94 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