如何安全地存储应用程序私有文件?

时间:2017-05-04 16:58:19

标签: android encryption android-file

阅读一些文章& stackoverflow上的线程。我发现即使是使用Context.MODE_PRIVATE存储的文件也可以在设备生根后读取。

那么我私下存储文件的选项是什么,这些选项只能在我的应用程序中读取。

加密是我唯一的选择吗?我将保持文件加密&只有我的应用知道如何解密。

android平台是否为此提供了任何其他机制?

4 个答案:

答案 0 :(得分:2)

实际上,对文件进行加密似乎是防止无限制访问数据的一种很好的防御措施。

Android为您提供了一系列工具来安全地加密和解密数据:

    如果您想使用用户的生物特征来保护数据(例如指纹或虹膜扫描)(不同的生物特征具有不同的安全级别,则
  • Biometrics API是理想的选择)此时此刻))。使用Biometrics API,您可以向用户询问其指纹/虹膜。用户通过身份验证后,您可以加密一些数据并存储加密的文本(和密码初始化向量),而不是存储明文(例如,在共享首选项或文件中)。请参阅here的用法。
  • 如果您想安全地存储加密密钥,证书或类似的PKI相关数据,则可以使用key stores。密钥库是一个加密的文件,其中的每个条目都可以使用不同的密码进行保护。请参阅here的用法。

Android提供了生成新的key pairssecret keys的方法。

答案 1 :(得分:2)

有些库提供Hawk之类的Secure Share Pref,足以满足您的目的。

答案 2 :(得分:1)

简短的答案:您不能,尽管我看到一些建议,可以使人们在当前答案中找到您的秘密更加烦人。

更长的答案:You cannot 100% guarantee the security of any data,但这是 尤其 ,如果它在别人手中的物理设备上。

APK代码本身isn't all that secure from reverse engineering(链接到在线apk反编译器)也是正确的。

话虽这么说,您有好得多的机会将数据保护在只能由经过身份验证的用户访问的服务器上。

这可能是许多级别的矫kill过正,但是Payment Cards Industry (PCI) compliance standards for data handling(带有概述的随机链接)可能是一个很好的起点,然后您可以自己决定要实际实现多少安全性。这些是存储付款卡号(BIN)的付款处理器所需的数据安全标准。

还有很多较小的支付处理器,它们将数据处理中符合PCI要求的部分外包给已经拥有基础架构的公司,由于需求高,他们自己没有投资建立标准。

我从金融科技行业的工程经验中了解所有这些PCI知识。 :)

答案 3 :(得分:0)

除上述解决方案(加密)外,另一种解决方案是 Firebase的云存储(如果您不在本地保存文件,而改用Firestore缓存):

https://firebase.google.com/products/storage

如果您的数据可以保存在数据库中(如共享首选项数据),则最好使用 Cloud Firestore

https://firebase.google.com/products/firestore