如何将加密数据写入文本文件?

时间:2014-04-17 16:38:55

标签: java file encryption encryption-symmetric

我有一个项目,我们每隔5分钟就会向文件中写入少量数据。我们的想法是查看这些数据在数小时,数天和数周内的变化情况。

其中一项要求是以安全格式存储此数据。我们已经有了一种加密方案,可以通过DataI / O流将这些数据作为byte []数组通过网络发送。

我的问题是,有没有办法将加密的byte []数组写入文本文件,以便我可以将它们读出来?我目前最大的问题是我正在从文件中读取字符串,这会弄乱byte []数组。

关于去哪里的任何想法或指示?

2 个答案:

答案 0 :(得分:5)

您需要做的是获取数据并将其放入字节数组中。然后,一旦它在字节数组中,您可以使用加密算法对其进行加密。然后你把它写到文件中。

当您想要获取原始数据时,您必须从文件中读取字节数组,然后解密字节数组,然后您将获得原始数据。您不能只是将此数据作为字符串读取,因为您的加密算法将创建无法表示为常规字符的字节,因此您的数据将被搞砸。

请确保您将加密数据读取为字节数组而不是字符串,这是您遇到问题的地方。


如果要将多个字节数组写入单个文件,那么您可能应该这样做,因为您使用的是Java:

writer.print(arr.length);
writer.print(arr);
writer.flush();

对每个字节数组执行此操作。然后当你读回字节数组时:

int length = reader.readInt();
byte[] bytes = new byte[length];
// fill array

这样文件的结构可以这样:

  

[跟随数组的长度] [数组] [第二个数组的长度] [第二个数组]

您将能够将所有字节数组背靠背,并且由于每个数组都以数组的长度开头,因此您将知道需要将多少数据放入每个数组中。

答案 1 :(得分:0)

有关AES + CBC Java示例的示例,请参见How to append to AES encrypted file,该示例允许打开一个已经加密的文件并将更多的加密数据附加到in中,同时在解密该文件时不需要任何特殊处理,因为它看起来就像如果整个文件仅被加密一次。