2014-07-13 112 views
1

我正在创建一个Android应用程序,在该应用程序中首次使用电话号码验证(与Whatsapp中的情况相同)。当电话号码得到验证成功后,我希望以不能被用户更改/更改的方式存储号码。默认情况下,Android(SQLlite)中的数据以文本格式存储在存储上,可以由用户编辑。我想消除这个缺点。我应该使用SQLCipher来存储它吗?或者有没有其他的方式来存储它? 还是有谁知道Whatsapp使用哪种技术来存储这种类型的敏感信息?如何在Android数据库中安全地存储数据

回答

0
> data in Android is stored .. on the storage, which can be edited by the user. 

大多数用户永远不会尝试(甚至不知道)这样的举动。

您可能会遇到来自拥有固定设备或高级用户(通常是开发人员)的用户通过abd或DDMS的这种行为,但坦率地说,在7年的Android开发过程中,我从未遇到过“天真”的用户修改应用程序的数据库。

你应该,但是,被黑客试图访问准备/修改你用户的隐私数据和最好的工具 我知道以保护数据库从这些黑客是SqlCipher

说到非数据库秘密数据存储,请务必在手动编码加密机制之前阅读this

+0

我得到了你的答案。但问题是我只想安全地存储一个10位数的电话号码。我不需要任何大型数据库。我应该如何安全地存储10位整数值? –

+0

访问此链接,它有关于如何密码秘密数据的详细说明:http://android-developers.blogspot.co.il/2013/02/using-cryptography-to-store-credentials.html –

0

the Android Security Tips article逐字引用:

默认情况下,您在internal storage创建文件只能访问到你的应用程序。这种保护由Android实施,对于大多数应用程序而言已足够。

对于IPC文件,通常应避免使用MODE_WORLD_WRITEABLEMODE_WORLD_READABLE模式,因为它们不提供限制对特定应用程序的数据访问的能力,也不提供对数据格式的任何控制。如果您想与其他应用程序进程共享数据,则可以考虑使用content provider,该应用程序为其他应用程序提供读取和写入权限,并可以根据具体情况制定动态权限授予。

要为敏感数据提供额外的保护,您可以选择使用应用程序无法直接访问的密钥来加密本地文件。例如,可以将密钥放置在KeyStore中,并使用未存储在设备上的用户密码进行保护。虽然这不能保护数据免受可能监视用户输入密码的根本危害,但它可以为没有file system encryption的丢失设备提供保护。

另请注意,在external storage上创建的文件(如SD卡)是全局可读写的。由于外部存储可以由用户删除,也可以由任何应用程序修改,因此您不应该使用外部存储来存储敏感信息。

最后,this SO question (Android Secure Storage)可能会让你感兴趣。

相关问题