【问题标题】:Append to CipherOutputStream - AES/CTR/NoPadding (Java)附加到 CipherOutputStream - AES/CTR/NoPadding (Java)
【发布时间】:2020-01-10 13:26:23
【问题描述】:

因此,我的应用程序从互联网下载视频,但在下载视频时对其进行即时加密,并将加密数据写入存储。我正在使用 AES/CTR/NoPadding。 如何将加密数据附加到已经加密的文件中? 那是因为下载可能会停止或连接可能会断开,因此应用程序可以恢复下载。我通过在恢复情况下传递附加参数来尝试此操作,文件已完成(恢复)并且我可以将文件解密回来(没问题)但文件已损坏,当我将其与一次性下载的加密文件进行比较时(没有暂停和恢复)这是完全不同的。 并且一次性下载的文件解密后完全可以正常运行,可以播放,所有位都完好无损。

我正在使用一个硬编码的 128 位密钥和一个硬编码的 128 位 IV。

【问题讨论】:

  • CTR 模式不需要填充并使用计数器进行加密。这可以按需加密任何 128 位索引,甚至任何位。如果你知道最后一个索引你很好,假设它们总是 128 位。为什么不使用 TLS?
  • 这需要保存标准密码实现不支持的 AFAIK 的 CTS 密码的内部状态。顺便说一句:CTS 是一种糟糕的视频播放密码,因为它使跳过非常非常复杂。也许您应该更好地将文件分成块并使用干净的密码实例加密每个块。这将简化追加和查找。
  • @kelalaka 恐怕我不明白。你是什​​么意思我不使用 TLS?
  • @Robert 好吧,我使用 ExoPlayer 播放视频和自定义加密数据源的自定义实现来处理文件,跳过和倒带对我来说很好。因为实现不是我写的,而是别人写的。

标签: java android encryption aes fileoutputstream


【解决方案1】:

您可以使用相同的方案来设置解密偏移量,我已在this answer 中进行了说明。实际上,对于 CTR 模式,加密与解密是相同的操作,因此很明显两种操作的工作方式相同。当然,您必须提前将 IV 与密文一起存储才能正常工作。

【讨论】:

  • 天哪,你不知道我为此困扰了多少天。非常非常感谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2021-09-24
  • 2020-08-13
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多