Android - 如何隐藏内部/外部存储中的文件?

时间:2018-04-14 08:41:12

标签: android performance local-storage hidden-files

我想在Android中的内部/外部存储中隐藏undefined个文件。我们的要求是使文件仅在我们的Android应用中显示,而不是video/audio/pdf等任何其他应用,甚至在将设备连接到Es File Explorer时也不会。

我搜索了很多内容并找到了以下方法,但缺点很少。

创建带有前缀“。”的文件夹/文件 - 它的缺点是我们无法阻止它在某些带有“Desktop/Laptop”选项的文件资源管理器应用中显示,而我们无法连接到Show hidden files时阻止文件显示。

将文件存储在应用专用文件夹中 - 将Desktop/Laptop存储在large memory files返回的路径中会导致设备性能不佳,而且大多数设备都不会内存大小很大。

如何克服这些缺点并使我们的应用满足要求?

2 个答案:

答案 0 :(得分:1)

您的第一个提议的解决方案无法正常工作,因为它可以让任何人都可以访问文件。 如果文件大小有限,第二种解决方案是完美的。如果是large memory files,最好将它们存储在External storage中。但这将使其公开可访问。为了防止您加密文件并将其存储在外部存储中。

这样做的一些建议:

  1. 将文件名随机化,以免变得容易猜到。
  2. 有关简单文件加密,请参阅this
  3. 不要使用静态密钥进行加密,因为它可以反向 工程。为每个文件使用不同的密钥。
  4. 不要将原始密钥存储在db / shared首选项中。存放 反而是哈希。
  5. 您甚至可以散列密钥n times,然后存储在db中。这个会 使程序有点慢,但提供更多的安全性 知道n获取原始密钥的确切值。
  6. 为了增加安全性,您甚至可以考虑使用Android's KeyStore 推导出IV。

答案 1 :(得分:0)

如果没有加密,建议不要将文件隐藏到用户可访问的存储空间。

Youtube,Gaana,saavan,hotstar所有这些与媒体相关的应用程序,用于加密数据和存储在数据位置,这些应用程序对用户可见,但在数据加密时无法以其他方式共享或使用。

您可以使用CipherOutputStreamCipherInputStream加密和解密android中的文件。

有两种方法可以实现目标

下载文件并对其进行加密,当您要播放该文件时,请将其解密为临时文件并播放,我不建议使用该文件,因为它会增加数据获取的可能性。

如果您想要即时播放加密文件(不在临时文件中解密),那么您可以使用Libmedia库。它在本地主机上传输加密文件并从那里播放

原始答案:https://stackoverflow.com/a/35426842/9565955