简短回答:它是相当安全的。
长话短说:如果你正在创建一个允许用户登录到 Web/远程服务的应用程序,你可能需要查看AccountManager
。学习API并与之集成有点难,但你可以获得一些不错的优势:
AccountManager
中)。SyncAdapter
(编写它们将会变得相当简化,因为AccountManager
会使用正确的帐户调用适配器——你不必手动为每个帐户运行同步操作)。设置 > 帐户和同步
下。在文档中查看示例同步适配器——它展示了如何使用AccountManager
(如果您不需要同步内容,则可以忽略同步内容)。
现在,让我们来谈谈密码存储的安全性(以下内容适用于将密码存储在SharedPreferences
和AccountManager
中)。只要你的应用程序所在的设备没有经过 root,就是完全安全的。除了你的应用程序之外,没有其他应用程序可以读取密码。即使你使用 USB 电缆连接手机并使用adb pull
尝试获取相应的文件,你也无法读取密码。
但是,如果手机已经被root,任何获得 root 访问权限的应用程序都可以读取密码。而且,adb pull
可以正常工作,你可以在几秒钟内获取密码。
因此,建议使用加密技术保护您的网站/云服务/远程服务中的敏感数据。我在最近的项目中使用了SimpleCrypto
(与AccountManager
一起使用),效果很不错。如果您想知道,我只是使用了一个常量作为“主密码”。为了增强安全性,我还混淆了最终构建版本(查看方法)。
在明文中存储密码永远不安全,还记得索尼最近发生的事情吗?
任何Java加密技术都可以使用。
您永远不应该直接保存密码,而是应该保存密码的哈希值。