【问题标题】:Encrypting files in resource constrained mobile devices在资源受限的移动设备中加密文件
【发布时间】:2010-07-11 18:03:55
【问题描述】:

所以基本问题是在资源受限的设备中加密文件。 我使用了一种相当危险的方法来使用两个 FileStream,其中

  1. FileStream 1 正在读取文件并将其复制到字节数组中
  2. 字节数组的内容已加密。
  3. FileStream 2,将字节写回同一个文件。

这很好用,但如果加密中途停止等,很有可能会弄乱文件。

所以正常的做法是写入临时文件,然后将其移动到原始位置并替换原始文件。

但是问题在于资源(尤其是存储空间)非常有限的手机,创建另一个 200MB 或 300MB 文件可能是不可能的。

那么在 Mobile Devies 中有什么方法可以解决这个问题呢?我必须在空间和弄乱文件之间进行赌博吗?

【问题讨论】:

标签: c# encryption windows-mobile resources filestream


【解决方案1】:

让流程更安全的一种方法是:

  1. FileStream 1 正在读取文件并将其复制到字节数组中
  2. 您读取的字节被写入一个与缓冲区大小相同的小“临时”文件,以及成功读取的最后一个块的位置。
  3. 字节数组的内容已加密。
  4. FileStream 2,将字节写回同一个文件。

如果该过程被中断,请检查暂存文件以查看您最后的位置。然后您可以从那里重新启动该过程,并且仍然能够加密整个文件。 (如果你想取回原始文件,你会加密剩余的块,然后解密它)。

当然,此过程仅在您使用加密算法时才有效,该算法在加密当前块时依赖于前面块的结果。根据您选择的算法,您可能需要存储更多。

【讨论】:

  • 是的。我使用密码块链接作为我的操作模式,它依赖于前一个块来加密当前块。这听起来很有希望。我应该试一试:)
【解决方案2】:

首先,您可以随时检查是否有足够的空间将您的数组写入 tmp 文件。

接下来,您提出的问题不是真正的问题,因为如果您正在加密,您已经将完整的文件读取到数组中。加密完成后,您可以确定字节数组已加密。如果不是这种情况,该函数将引发异常。因此,在第 3 步中,当您写入文件时,您可以覆盖它。

编辑 我现在意识到你加密并部分写入文件,否则它不适合 ram。对吗?

【讨论】:

  • 是的。我部分参与 -> 加密一部分并将该部分写回文件。
【解决方案3】:

我必须在空间和弄乱文件之间进行赌博吗?

基本上是的。
如果空间约束迫使您就地转换(加密),则没有回滚选项。

下一个问题是大小。如果您的转换(可以)增加数据的大小,那么您的操作空间非常有限。如果 ResultSize > (InputSize + Buffer) 那么你不会成功。

在加密的情况下,您可以在 CryptoStream 前面使用 CompressStream,但您无法预测它是否会起作用。

简而言之,在移动设备上,您已经达到了限制。您将不得不要求额外的内存设备。

【讨论】:

  • 加密文件将与原始文件的大小相同,如果这是您所要求的 :) 在加密过程结束时,ResultSize = InputSize。
  • @Ranhiru:关于保持相同大小的加密可能是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 2012-01-20
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多