可能的重复:
存储密码 https://stackoverflow.com/questions/5359399/storing-a-password
我正在使用共享首选项来存储密码。按原样保存密码数据是否安全,或者我必须在保存之前对其进行加密。请帮我提供示例代码。
提前致谢,
简短回答:是pretty secure.
长答案:首先,如果您正在创建一个允许用户登录 Web/远程服务的应用程序,您可能需要查看AccountManager http://developer.android.com/reference/android/accounts/AccountManager.html。学习 API 并与其集成有点困难,但您会获得一些不错的好处:
- 简单的多帐户管理(所有帐户都存储在
AccountManager
).
- 能够添加
SyncAdapter
s(并且编写它们将非常简单,因为AccountManager
将使用正确的帐户调用您的适配器 - 您不必手动为每个帐户运行同步)。
- 您的应用程序将出现在下面
Settings > Accounts & sync
.
查看示例同步适配器 http://developer.android.com/resources/samples/SampleSyncAdapter/index.html在文档中——它展示了如何使用AccountManager
(如果不需要,可以忽略同步内容)。
现在,讨论存储密码的安全性(以下内容对于将密码存储在SharedPreferences
and in AccountManager
)。只要运行应用程序的设备没有获得 root 权限,它就是完全安全的。除您的应用程序外,没有其他应用程序可以读取密码。如果您使用 USB 线将手机连接到 PC 并使用,您甚至无法读取密码adb pull
尝试获取相应的文件。
但是,如果手机已获得 root 权限,则任何获得 root 访问权限的应用程序都可以读取密码。还,adb pull
有效,您可以在几秒钟内获得密码。
因此,建议加密(特别是如果您的网络/云/远程服务保存敏感数据)。我用过SimpleCrypto http://www.androidsnippets.com/encryptdecrypt-strings在我的上一个项目中(与AccountManager
)而且效果很好。如果您想知道,我只是使用了一个常量作为“主密码”。为了增加安全性,我混淆了最终的构建(看看如何 http://developer.android.com/guide/developing/tools/proguard.html).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)