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

5
我有一个项目,每5分钟向文件写入一小部分数据。目的是观察这些数据在几小时、几天和几周的时间内如何变化。
其中一个要求是以安全的方式存储这些数据。我们已经通过DataI/O流将加密后的字节数组作为byte[]数组发送到网络上。
我的问题是,有没有一种方法可以将加密后的字节数组写入文本文件并能够读取它们?我目前遇到的最大问题是从文件中读取字符串会破坏字节数组。
你有什么想法或建议吗?

是的。你将面临的问题是,你需要在你的应用程序中拥有解密密钥,因此可能会被某些人获取。 - njzk2
可能是重复的问题:如何在Java中将字节数组写入文件? - 2rs2ts
请参考这个答案 - 2rs2ts
@2rs2ts,这不是重复的问题,因为我们只想将加密的byte[]数组附加到文件中。我们不会向文件中写入大量数据,而是逐步追加新的加密byte[]数组。如果需要更多信息,请在问题中告诉我! - Kyte
使用 Files.writeStandardOpenOption.APPEND 来追加文件内容。要读取文件,可以使用 Files.readAllBytes 然后解析,或者当然也可以使用 FileInputStream - 2rs2ts
我觉得你在询问如何编写和读取二进制文件。"有没有一种方法可以将加密的byte[]数组写入文本文件,以便我可以读取它们?" 不要将文件视为文本文件进行读取,这样你就会成功。 - 2rs2ts
2个回答

5
您需要做的是将数据放入字节数组中,然后使用加密算法对其进行加密。一旦它被转化为字节数组,您可以将其写入文件。
当您想要获取原始数据时,需要从文件中读取字节数组,解密字节数组,然后就可以获得您的原始数据。不能将此数据作为字符串读取,因为加密算法会创建无法表示为常规字符的字节,所以您的数据将会混乱不堪。
请确保将加密数据作为字节数组而不是字符串读取,这就是您遇到问题的地方。
如果您想将多个字节数组写入单个文件,则应该这样做,因为您正在使用Java:
writer.print(arr.length);
writer.print(arr);
writer.flush();

针对每个字节数组都采用此方法。当读取字节数组时,请按照以下步骤执行:
int length = reader.readInt();
byte[] bytes = new byte[length];
// fill array

这样,文件的结构可以如下所示:

[后续数组的长度][数组][第二个数组的长度][第二个数组]

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

当数据被加密后,会返回一个byte[]数组。所以我们已经有了这个。问题是如何将多个byte[]数组写入文件,并如何读取它们。从文件中读取单个byte数组是问题的一部分。 - Kyte

0
请参考如何向AES加密文件追加内容,这是一个AES+CBC Java示例,允许打开已经加密的文件并将更多加密数据追加到其中,而在解密时不需要任何特殊处理,因为它看起来就像整个文件只被加密了一次。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接