2011-11-02 70 views
15

在設備上保存用戶名和密碼的最佳做法是什麼?Android - 我們應該在設備內存中保存用戶名和密碼?

我已經經歷了很多Stackoverflow的答案,現在我有點困惑。

我正在開發一個電子郵件應用程序,我希望我的用戶在使用它時感到絕對安全。

有些人建議我們加密它並保存在SharedPreference中。有人建議我們不應該將其保存在設備上。

我只想將用戶的詳細信息存儲在最安全的地方。

任何幫助,建議將不勝感激。

謝謝。

回答

17

您應該使用AbstractAccountAuthenticator類保存用戶憑據。這不僅是超級安全的,它也讓你的應用感覺與android更加融合。你有沒有去過Android設置中的「賬戶」屏幕,並在那裏看到你的Facebook,Twitter和GMail賬戶?這是因爲他們使用了AccountAuthenticator。此外,它允許您將URI/ContentProvider與特定的用戶帳戶相關聯。要看到一個非常全面(但很複雜)的例子,請查看SampleSyncAdapter示例。

+0

感謝這個精彩的建議。我現在正在嘗試。 :)我會讓你知道,如果我將面臨任何麻煩,而應用這種技術。再次感謝。 – Varundroid

-3

SharedPreference是最好的選擇。

  1. 易於使用
  2. 只有當用戶的應用程序
  3. 靈活性清除數據時,用戶使用另一組登錄憑證更改值刪除。

下面介紹如何做到這一點。

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存儲是不安全的或者可能被篡改。

+1

有趣的是,如果你使用類似ACRA的東西來爲你做異常日誌記錄,它會在崩潰時將所有用戶共享的prefs轉儲出去,所以密碼就暴露在那裏......有趣的事情。 – topwik

+0

@towpse你可以轉儲所有你想要的,但你永遠不能使用該密碼登錄到應用程序。 – Aakash

+2

取決於應用程序不是嗎? – topwik

1

你有任何控制服務器端,或者這是一個通用的電子郵件客戶端?如果你可以控制服務器端,我會做一些驗證,然後讓服務器生成一個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/

1

如果擔心安全問題,最終仍然歸結爲以加密形式保存用戶憑據。以下是一些建議:

  1. 考慮使用Base64加密憑證。

  2. 加密密鑰應該分成不同的部分並保存在應用程序的不同部分。只能由應用程序邏輯組合。

  3. 考慮使用JNI來加密部分代碼。

  4. 一旦你有一個加密邏輯,你應該使用AbstractAccountAuthenticator。

記住兩件事: a。 apk可以被反編譯來檢索密鑰。 (這就是爲什麼(2)和(3))。 b。保存純文本是災難性的。 (這就是爲什麼(1))。

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

相關問題