如何将 user/password 存储在 android 中?
How to store user/password in android?
我正在尝试创建一个连接到邮件服务器并定期检索电子邮件的简单应用程序。我已阅读有关 AccountManager (http://developer.android.com/reference/android/.../AccountManager.html) and an excellent article on how to code a similar stuff (http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/) 的信息。
据我了解,此解决方案提供了一种处理服务器返回的身份验证令牌的方法。但是,对于像 POP3 和 Exchange Active Sync 这样的邮件服务器,我们每次与他们交谈时都需要提供用户名和密码,并且身份验证令牌的用途有限。
有没有办法安全地存储这种情况下的用户名和密码?
请注意,AccountManager
默认情况下不受任何加密方法保护。那里的密码以纯文本形式存储。
一般来说,将敏感数据本地存储在 Android 设备上总是存在被泄露的风险。但是,有一些可用的选项可以让黑客更难提取应用程序的敏感数据,从而降低您的风险。加密数据后,一个常见的问题是您需要一种方法来隐藏您的加密密钥。 Android 的 Keystore
系统可以提供帮助。
The Android Keystore system lets you store private keys in a container
to make it more difficult to extract from the device. Once keys are in
the keystore, they can be used for cryptographic operations with the
private key material remaining non-exportable.
我建议查看 Ophio 的 Secure-Preferences 库。该库提供了一个抽象概念,用于在将数据存储在 SharedPreferences
之前混淆您的数据,并提供一个 KeyStoreKeyGenerator
用于加密您的加密密钥。在本地保存用户密码可能如下所示:
private static void stashPassword(Application application, String password) {
String secretKey = null;
try {
secretKey = KeyStoreKeyGenerator.get(application, "KeyFilename")
.loadOrGenerateKeys();
} catch (Exception exception) {
// handle error
}
SharedPreferences preferences = new ObscuredPreferencesBuilder()
.setApplication(application)
.obfuscateValue(true)
.obfuscateKey(true)
.setSharePrefFileName(PREFERENCES_NAME)
.setSecret(secretKey)
.createSharedPrefs();
preferences.edit().putString(KEY_PASSWORD, password).apply();
}
查看 this article 了解有关保护您保存在 SharedPreferences
中的信息的更多信息。
我正在尝试创建一个连接到邮件服务器并定期检索电子邮件的简单应用程序。我已阅读有关 AccountManager (http://developer.android.com/reference/android/.../AccountManager.html) and an excellent article on how to code a similar stuff (http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/) 的信息。
据我了解,此解决方案提供了一种处理服务器返回的身份验证令牌的方法。但是,对于像 POP3 和 Exchange Active Sync 这样的邮件服务器,我们每次与他们交谈时都需要提供用户名和密码,并且身份验证令牌的用途有限。
有没有办法安全地存储这种情况下的用户名和密码?
请注意,AccountManager
默认情况下不受任何加密方法保护。那里的密码以纯文本形式存储。
一般来说,将敏感数据本地存储在 Android 设备上总是存在被泄露的风险。但是,有一些可用的选项可以让黑客更难提取应用程序的敏感数据,从而降低您的风险。加密数据后,一个常见的问题是您需要一种方法来隐藏您的加密密钥。 Android 的 Keystore
系统可以提供帮助。
The Android Keystore system lets you store private keys in a container to make it more difficult to extract from the device. Once keys are in the keystore, they can be used for cryptographic operations with the private key material remaining non-exportable.
我建议查看 Ophio 的 Secure-Preferences 库。该库提供了一个抽象概念,用于在将数据存储在 SharedPreferences
之前混淆您的数据,并提供一个 KeyStoreKeyGenerator
用于加密您的加密密钥。在本地保存用户密码可能如下所示:
private static void stashPassword(Application application, String password) {
String secretKey = null;
try {
secretKey = KeyStoreKeyGenerator.get(application, "KeyFilename")
.loadOrGenerateKeys();
} catch (Exception exception) {
// handle error
}
SharedPreferences preferences = new ObscuredPreferencesBuilder()
.setApplication(application)
.obfuscateValue(true)
.obfuscateKey(true)
.setSharePrefFileName(PREFERENCES_NAME)
.setSecret(secretKey)
.createSharedPrefs();
preferences.edit().putString(KEY_PASSWORD, password).apply();
}
查看 this article 了解有关保护您保存在 SharedPreferences
中的信息的更多信息。