0

我正在尝试创建一个连接到邮件服务器并定期检索电子邮件的简单应用程序。我已经阅读了有关 AccountManager ( http://developer.android.com/reference/android/.../AccountManager.html ) 和一篇关于如何编写类似内容的优秀文章 ( http://blog.udinic.com/ 2013/04/24/write-your-own-android-authenticator/)。

据我了解,此解决方案提供了一种处理服务器返回的身份验证令牌的方法。但是,对于像 POP3 和 Exchange Active Sync 这样的邮件服务器,我们每次与它们交谈时都需要提供用户名和密码,并且身份验证令牌的用途有限。

有没有办法安全地存储这种情况下的用户名和密码?

4

1 回答 1

1

请注意,AccountManager默认情况下不受任何加密方法的保护。那里的密码以纯文本形式存储。

通常,在 Android 设备上本地存储敏感数据始终存在被泄露的风险。但是,有一些可用的选项可以通过使黑客更难提取应用程序的敏感数据来降低您的风险。一旦你加密了你的数据,一个常见的问题是你需要一种方法来隐藏你的加密密钥。Android 的Keystore系统可以提供帮助。

Android Keystore 系统允许您将私钥存储在一个容器中,以使其更难以从设备中提取。一旦密钥在密钥库中,它们就可以用于加密操作,而私钥材料仍然不可导出。

我建议查看 Opio 的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();
}

查看这篇文章,了解有关保护您保存的信息的更多信息SharedPreferences

于 2016-04-23T14:42:15.643 回答