在設備上保存用戶名和密碼的最佳做法是什麼?Android - 我們應該在設備內存中保存用戶名和密碼?
我已經經歷了很多Stackoverflow的答案,現在我有點困惑。
我正在開發一個電子郵件應用程序,我希望我的用戶在使用它時感到絕對安全。
有些人建議我們加密它並保存在SharedPreference中。有人建議我們不應該將其保存在設備上。
我只想將用戶的詳細信息存儲在最安全的地方。
任何幫助,建議將不勝感激。
謝謝。
在設備上保存用戶名和密碼的最佳做法是什麼?Android - 我們應該在設備內存中保存用戶名和密碼?
我已經經歷了很多Stackoverflow的答案,現在我有點困惑。
我正在開發一個電子郵件應用程序,我希望我的用戶在使用它時感到絕對安全。
有些人建議我們加密它並保存在SharedPreference中。有人建議我們不應該將其保存在設備上。
我只想將用戶的詳細信息存儲在最安全的地方。
任何幫助,建議將不勝感激。
謝謝。
您應該使用AbstractAccountAuthenticator類保存用戶憑據。這不僅是超級安全的,它也讓你的應用感覺與android更加融合。你有沒有去過Android設置中的「賬戶」屏幕,並在那裏看到你的Facebook,Twitter和GMail賬戶?這是因爲他們使用了AccountAuthenticator。此外,它允許您將URI/ContentProvider與特定的用戶帳戶相關聯。要看到一個非常全面(但很複雜)的例子,請查看SampleSyncAdapter示例。
SharedPreference是最好的選擇。
下面介紹如何做到這一點。
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存儲是不安全的或者可能被篡改。
你有任何控制服務器端,或者這是一個通用的電子郵件客戶端?如果你可以控制服務器端,我會做一些驗證,然後讓服務器生成一個UUID,並保留在未來的api調用本地。另一個想法是將密碼的哈希值發送給API調用,而不是實際的密碼,然後您可以在本地存儲密碼哈希值。
加密用戶名/密碼的問題是您的代碼需要能夠解密它,並且如果您的代碼可以解密它,有人可以逆向工程化您的代碼並且也可以這樣做,儘管您可以使它更容易/更難以編碼和打包它。
一旦你弄清楚你正在存儲什麼,你可以找出你如何存儲它。一個帳戶?共享首選項。多個帳戶?創建一個Sqlite數據庫。
我建議使用http://ormlite.com/來處理你的數據庫連接。我做了很多最初的Android端口工作,現在它已經被頂尖的黑客組織加強/維護。非常穩固的東西。
查看更多SQLite的博客文章:
http://www.touchlab.co/blog/single-sqlite-connection/ http://www.touchlab.co/blog/android-sqlite-locking/
如果擔心安全問題,最終仍然歸結爲以加密形式保存用戶憑據。以下是一些建議:
考慮使用Base64加密憑證。
加密密鑰應該分成不同的部分並保存在應用程序的不同部分。只能由應用程序邏輯組合。
考慮使用JNI來加密部分代碼。
一旦你有一個加密邏輯,你應該使用AbstractAccountAuthenticator。
記住兩件事: a。 apk可以被反編譯來檢索密鑰。 (這就是爲什麼(2)和(3))。 b。保存純文本是災難性的。 (這就是爲什麼(1))。
再次想到,一旦你有了1,2和3,你也可以使用SharedPreferences。
感謝這個精彩的建議。我現在正在嘗試。 :)我會讓你知道,如果我將面臨任何麻煩,而應用這種技術。再次感謝。 – Varundroid