任务是保存输入的密码(PasswordStr)或mKey.getEncoded byte [],然后自动发送到Crypto API(Cipher)
SecretKey mKey = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1").generateSecret(new PBEKeySpec(PasswordStr.toCharArray());
很明显,这个密码也可以加密,但这需要另一个密码等等。
可能Android已经提供了存储密码的机制吗?
p.s使用远程服务器是不可能的。需要在本地存储。
答案 0 :(得分:3)
您可以使用Android的Keystore API
。
秘密由来自手机密码或密码的masterpassword加密。它被认为是一种优秀的基于软件的加密解决方案。请注意,用户必须在手机上设置密码/密码才能使其正常工作。
Nelenkov gives a good overview:
Android的凭据存储是作为本机Linux服务实现的 (守护进程),顶部有一些额外的层,使其可用 到框架。让我们快速回顾一下我们对密钥库的了解 守护进程(在此更详细地描述):
- 它是一个本机守护进程,在启动时启动
- 它提供了一个本地控制套接字,允许应用和系统服务与之通信
- 使用AES 128位主服务器加密密钥
- 密钥加密密钥存储在/ data / misc / keystore中,每个密钥一个文件
- 主密钥来自设备解锁密码或PIN
- 根据来电者UID授权管理命令执行和密钥访问
有关详细信息,请参阅Android Documentation。
答案 1 :(得分:2)
检查Handling Credentials section on the android developers guide。我在这里引用它。
如果可能,用户名和密码不应存储在设备上。而是使用用户提供的用户名和密码执行初始身份验证,然后使用短期,特定于服务的授权令牌。
应使用AccountManager访问多个应用程序可访问的服务。如果可能,请使用AccountManager类来调用基于云的服务,并且不要在设备上存储密码。
在传递任何凭据之前使用AccountManager检索Account,CREATOR后,您不会无意中将凭据传递给错误的应用程序。
如果凭据仅由您创建的应用程序使用,则可以使用checkSignature()验证访问AccountManager的应用程序。或者,如果只有一个应用程序将使用该凭据,您可以使用KeyStore进行存储。
答案 2 :(得分:0)
你可以使用SQLCipher
来安卓android。它是SQLite
的扩展,为数据库文件提供透明的256位AES加密