有一个随机密钥通过 AES 加密本地凭据,我按照下面的教程尝试存储securely该密钥稍后可以解密:
nelenkov.blogspot.co.uk 在 Android 中存储应用程序秘密 http://nelenkov.blogspot.jp/2012/05/storing-application-secrets-in-androids.html
本教程讲解如何进入系统keystore并将您的密码存储在其中。
我面临的问题集中在调用UNLOCK (android.credentials.UNLOCK) 密钥库。未初始化 KeyStore 的设备(目前 API 低于 14)将显示一个对话框,要求输入 8 位密码。
该教程工作正常,但是即使仅显示此对话框一次,它也会困扰大多数用户。
有什么办法可以跳过这个对话框吗?
如果有人描述一种更好的方法来在本地保存密钥,我会更高兴。
KeyStore
不仅在 ICS 之前的设备上可能会显示为锁定。最简单的获取方式KeyStore
锁定的是:
- 通过设置 KeyGuard(图案、引脚或
屏幕锁定密码)
- 添加密钥或您存储在 KeyStore 中的任何内容
- 转到“设置”>“安全”,然后将“屏幕锁定”更改为“不
安全”,例如 Slide。
- 重新启动您的设备。
设备启动后,KeyStore
将被锁定。com.android.credentials.UNLOCK
意图将开始com.android.settings.CredentialStorage
活动,反过来,将显示UnlockDialog
,提示输入密码。
* KeyStore: LOCKED
* KeyGuard: OFF/ON
* Action: old unlock dialog
* Notes: assume old password, need to use it to unlock.
* if unlock, ensure key guard before install.
* if reset, treat as UNINITALIZED/OFF
KeyStore
5 次尝试输入错误密码后重置。但重置 KeyStore 实际上并不会将其关闭或取消初始化。 KeyStore 保持锁定状态,取消初始化它的唯一方法似乎需要com.android.credentials.RESET
。但这将重置 KeyStore 和 KeyChain(用户安装的证书)。
如果您想静默重置 KeyStore 和 KeyChain,无需用户确认,您可以通过绑定到IKeyChainService
并称其为reset()
方法。
但我不建议这样做。更好的解决方案可能是显示一些通知消息,要求用户手动设置屏幕锁定
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)