【问题标题】:How to secure passwords in Android Application如何保护 Android 应用程序中的密码
【发布时间】:2010-03-05 15:46:35
【问题描述】:

我的许多用户都要求为我的数据库中的各种数据元素设置密码保护。不幸的是,我现有的功能之一是将数据库备份到公共位置(SD 卡)以实现数据冗余,因此我的数据库不安全。

所以我的问题有两个。

  1. 如何在 android 上加密或保护数据库?

  2. 如何以安全、不可访问的方式将用户创建的密码存储在设备上。

【问题讨论】:

  • 这确实属于两个独立的问题
  • 您永远不应将密码存储为纯文本。存储(密码+盐)的SHA256。

标签: android security sqlite encryption passwords


【解决方案1】:

如果您使用 API 版本 5 或更高版本,您可以与 android.accounts.AccountManager 集成。

【讨论】:

  • 我使用的是 API 3。我可以升级,但会因为一个并非每个人都会使用的功能而失去太多用户。
【解决方案2】:

如果您通过首选项存储存储数据,则此数据只能由您的应用程序访问,前提是 android 系统有效(未 root 等)。每个应用程序都会获得一个自己的用户来访问文件系统,因此底层 linux 系统将阻止其他应用程序读取这些数据存储。

我还没有使用首选项管理器,也许您会在文档中找到有关如何使用它的答案。

如果您需要密码来登录外部网络应用程序并且不能简单地存储密码的哈希值,那么可以使用一种特殊的机制,例如用于 google 身份验证。您使用用户名密码登录 Web 应用程序,然后 Web 应用程序将安全令牌发送到您的设备。此令牌可以保存并在两周内从该设备登录有效。 这只有在您控制正在使用的网络应用程序的某些部分时才有效。

【讨论】:

  • 首选项存储是一个简单的键/值字典,不适合作为数据库的支持。此外,由 SQLLiteOpenHelper 创建的数据库文件受益于您描述的相同保护。
  • 如果您将密码存储在首选项存储中,则它们不会存储在数据库中,并且可以将数据库写入 sd 卡而无需担心安全问题
  • 即使没有密码,我仍然需要保护数据库。数据库中的某些数据将受到这些密码的专门密码保护,因此即使它们存储在其他地方,它们所保护的数据仍然需要受到保护。
  • 我认为攻击者首先会启动设备是一个合理的假设。所以不要依赖设备没有根目录来保护。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 2011-06-22
相关资源
最近更新 更多