2011-03-19 201 views
14

我正在創建一個應用程序來存儲加密數據。存儲密碼

this問題中,OP si建議清楚地存儲用戶的憑證。

但是如果我想存儲使用SecretKeySpec(用於加密數據的密碼)創建的加密密碼呢?根據我的理解,密鑰本身就是加密的。

所以我可以存儲和檢索它。

注意:我不問如何存儲首選項,就像我理解SecretKeySpec的工作方式以及如何排序和檢索加密密碼一樣。

編輯:對不起,我忘了指定它需要與API級別4

回答

11

直接從developer website

智能關於安全!

瞭解AccountManager不是加密服務或鑰匙串很重要。它以純文本格式存儲帳戶憑證,就像您傳遞它們一樣。在大多數設備上,這不是一個特別的問題,因爲它將它們存儲在只能由root用戶訪問的數據庫中。但是,在有根的設備上,任何具有adb設備訪問權限的人都可以讀取憑證。

考慮到這一點,您不應該將用戶的實際密碼傳遞給AccountManager。addAccountExplicitly()。相反,您應該存儲一個加密安全的令牌,該令牌對攻擊者的使用有限。如果你的用戶憑證保護着有價值的東西,你應該仔細考慮做類似的事情。

請記住:當涉及到安全代碼,請按照「Mythbusters」規則:不要在家中嘗試這個!在實施任何自定義帳戶代碼之前諮詢安全專家。

既然安全免責聲明已經完成,現在是時候重新開始工作了。您已經實施了自定義帳戶代碼的功能;剩下的就是管道。

6

哇兼容。我真的不認爲將用戶的密碼保存在明文中是一個嚴肅的選擇。

檢出AccountManager這是專爲此目的而設計的。雖然它在你所關聯的問題中被壓低了,SampleSyncAdapter真的是一個AccountManager例子的好資源,也是我知道的SDK中唯一的一個。

編輯 - 約javax.crypto,我認爲它是一個比AccountManager更低級別的API。從文檔:

許多服務器支持 認證令牌,可用於不發送用戶的實際 密碼驗證到 服務器發出請求 的一些概念。 (驗證令牌 通常與單獨的 請求其不包括該用戶的憑證 創建。)的AccountManager可以 產生用於應用程序身份驗證令牌, 因此應用程序不需要 手柄密碼直接。 Auth令牌 通常可重複使用並由Account Manager管理,但必須定期更新 。這是應用程序的責任 當他們停止工作時使auth 令牌失效,因此AccountManager知道它需要 重新生成它們。

我討厭在javax.crypto的級別上處理這個問題,如果我不需要的話。

+0

聽起來不錯。很好。但我需要保持與API級別4(我編輯的問題,對不起)保持兼容。無論如何+1 – 2011-03-19 09:29:28

-4

U可以簡單地聲明這兩個用戶名和密碼的if語句,如果條件匹配u能在錯誤的情況下啓動活動u能簡單地生成的錯誤舉杯input.but你無法如果u從那裏retreive密碼失去任何意思,但是你可以爲一個用戶創建許多密碼。我將這個東西添加到我的應用程序中,併爲我工作得很好。