Java 使用 AES 加密文件 - 最佳方法

Java encryption files using AES - Best Methods

我搜索了关于使用何种密码的最佳加密方法,methods/etc。我决定暂时使用 128 位 AES。我的问题更多在于哪种方法最适合加密各种类型的数据。在我的示例中,这是针对我正在制作的具有地图数据和相关图像数据的小游戏。

我可以以任何格式保存数据,但更喜欢简单易读的格式(未加密时)。我应该将其实际保存到文件本身,还是应该以某种方式更改文件本身?

同样,对于保存为 PNG 或 BMP 文件的与游戏相关的图像文件,关于如何在其余文件之上加密这些文件有什么建议吗?

我目前的游戏数据方法是仅以单行加密它 - 然后逐行从文件中加载它。每行格式化为要放入系统的不同数据值(例如加载地图的一部分,可能是一些项目数据等)。有没有 better/faster 我可能还没有找到的实现方法?

我也想知道是否实际获取整个 class 和保存的数据并序列化它 - 然后加密它。这样我就可以一次将整个东西直接加载到 class 中。这是一个合理的想法吗?

对于图像:您可以使用 CipherInputStream / CipherOuputStream 阅读它们。请注意,至少 较旧的 Java 版本忽略了 CipherInputStream.

的填充错误

您不能直接加密到行,因为密码的输出是二进制的。因此,如果您想将结果存储为行,则需要进行编码(例如使用 Base64)。您可能会问自己是否希望游戏数据之类的东西以文本形式出现。我会推荐 CBC 模式,在密文前加上随机 IV。

如果数据是可序列化的,那么序列化数据可能是一种选择。由于存在许多陷阱,就我个人而言,我不是 Java 序列化的忠实拥护者。但是,是的,您当然可以轻松加密序列化数据,毕竟它是二进制的。