Android – 我们应该在设备内存中保存用户名和密码?

在设备上保存用户名密码的最佳做法是什么?

我已经经历了很多Stackoverflow的答案,现在我有点困惑。

我正在开发一个电子邮件应用程序,我希望我的用户在使用它时感觉绝对安全。

有人build议我们应该encryption并将其保存在SharedPreference中。 有人build议我们不应该将其保存在设备上。

我只想把用户的细节存储在最安全的地方。

任何帮助,build议将不胜感激。

谢谢。

    您应该使用AbstractAccountAuthenticator类保存用户凭证。 这不仅是超级安全的,它也让你的应用感觉与android更加融合。 你有没有去过Android设置中的“账户”屏幕,并在那里看到你的Facebook,Twitter和GMail账户? 这是因为他们正在使用AccountAuthenticator。 此外,它允许您将URI / ContentProvider与特定的用户帐户相关联。 为了看到一个非常全面(但是很复杂)的例子,请查看SampleSyncAdapter示例。

    你有任何控制服务器端,或者这是一个通用的电子邮件客户端? 如果你可以控制服务器端,我会做一些authentication,然后让服务器生成一个UUID,并保留在未来的api调用本地。 另一个想法是将密码散列发送到API调用,而不是实际的密码,那么你可以在本地存储密码散列。

    encryption用户名/密码的问题是你的代码需要能够解密,如果你的代码可以解密,有人可以反向工程你的代码,并做到这一点,虽然你可以通过如何更容易/更难你编码和打包它。

    一旦你弄清楚你正在存储什么,你可以找出你如何存储它。 一个帐户? 共享首选项。 多个帐户? 创build一个Sqlite数据库。

    我会build议使用http://ormlite.com/来处理你的数据库连接。 我做了很多最初的Android端口工作,现在已经被顶尖的黑客组织加强/维护了。 非常坚固的东西。

    查看更多Sqlite博客文章:

    http://www.touchlab.co/blog/single-sqlite-connection/ http://www.touchlab.co/blog/android-sqlite-locking/

    如果安全是一个问题,最终还是归结为以encryptionforms保存用户凭据。 这里有一些build议:

    1. 考虑使用Base64encryption凭证。

    2. encryption密钥应该分成不同的部分,并保存在应用程序的不同部分。 只能由应用程序逻辑组合。

    3. 考虑使用JNIencryption部分代码。

    4. 一旦你有一个encryption逻辑,你应该使用AbstractAccountAuthenticator。

    记住两件事:a。 apk可以被反编译来检索密钥。 (这就是为什么(2)和(3))。 湾 保存纯文本是灾难性的。 (这就是为什么(1))。

    再次想到,一旦你有了1,2和3,你也可以使用SharedPreferences。

    SharedPreference是最好的select。

    1. 使用方便
    2. 只有在用户清除App的数据时才会被删除
    3. 用户使用另一组login凭证时可灵活更改值。

    这是你如何做到这一点。

    import android.preference.PreferenceManager; private static final String LOGIN_EMAIL = "login_email"; private static SharedPreferences mAppPreferences; private static SharedPreferences.Editor mEditor; /*Insert your code to Get user entry of email from the EditText*/ mAppPreferences = PreferenceManager.getDefaultSharedPreferences(context); mEditor = mAppPreferences.edit(); mEditor.putString(LOGIN_EMAIL, v_user_email ); mEditor.commit(); 

    我不认为SharedPreference存储是不安全的或可以被篡改。