【问题标题】:How to write encrypted data to a text file?如何将加密数据写入文本文件?
【发布时间】:2014-06-02 01:24:33
【问题描述】:

我有一个项目,我们每 5 分钟将少量数据写入文件。我们的想法是查看这些数据在数小时、数天和数周内如何变化。

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

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

对去哪里有任何想法或指示?

【问题讨论】:

标签: java file encryption encryption-symmetric


【解决方案1】:

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

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

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


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

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

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

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

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

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

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

【讨论】:

  • 当数据被加密时,返回一个 byte[] 数组。所以我们已经有了。问题是如何将多个 byte[] 数组写入文件以及如何将它们读回。从文件中读取单个字节数组是问题的一部分
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2019-12-31
    • 2016-04-16
    • 1970-01-01
    • 2017-03-21
    • 2013-02-22
    相关资源
    最近更新 更多