【问题标题】:Java encryption files using AES - Best Methods使用 AES 的 Java 加密文件 - 最佳方法
【发布时间】:2015-01-05 16:20:20
【问题描述】:

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

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

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

我目前对游戏数据的处理方法是将其加密为单行 - 并从文件中逐行加载。每行格式化为要放入系统的不同数据值(例如,加载地图的一部分,可能是一些项目数据等)。有没有更好/更快的方法来完成这个我可能还没有找到?

我还想知道实际上是否将整个课程与保存的数据一起序列化并对其进行序列化 - 然后对其进行加密。这样我就可以将整个东西直接加载到一个类中。这是一个合理的想法吗?

【问题讨论】:

  • “我已经决定暂时使用 128Bit AES..” - 你决定采用什么模式? “我当前获取游戏数据的方法...” - 哦,这让事情变得复杂了。密钥存储在哪里?
  • 我目前在游戏本身上有一个固定键。考虑到反编译程序并找到它并不难,我知道这是相当薄弱的。关于可以使用什么方法来解密它,我可能会遇到另一个后续问题。我假设它可能是在运行时针对服务器或服务器发送密钥进行身份验证的问题。

标签: java image encryption cryptography


【解决方案1】:

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

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

如果数据是可序列化的,则可以选择序列化数据。由于存在许多陷阱,我个人不是 Java 序列化的忠实粉丝。但是,是的,您当然可以轻松地加密序列化数据,毕竟它是二进制的。

【讨论】:

  • 是的,我在第一次进行加密时发现了这一点。我目前将它们保存为 base64 字符编码。感谢您对 CipherInputStream 的建议 - 我会调查的。我也会看看你提到的CBC模式。以前没有听说过,所以我将不得不做一些挖掘。最后,以前没有听说过序列化 - 但会调查它。我最想研究一下,因为这是我已经知道的事情。感谢您的建议。
  • 只花了几分钟就读懂了序列化的一些陷阱之后——我可能不会选择它。我要序列化的类虽然很小,但总体上却构成了很多数据。另外,我的大多数课程可能会在功能和设置方面发生变化——因此最好只加密数据。我认为,对于一个简单的解决方案,我将按计划对数据进行加密,稍后再用密钥解决问题。
猜你喜欢
  • 1970-01-01
  • 2013-04-17
  • 2016-03-30
  • 2011-01-30
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
相关资源
最近更新 更多