2013-03-04 85 views
3

我有一個兩難的問題,我需要在我的Android設備上保存一些安全數據,這些數據是登錄信息給個人內閣,所以你可以請,給我一個建議,哪裏更好地保存這個信息到簡單的txt文件(但什麼關於安全性?)或者可能是Android平臺中的MySQL DB的模擬(以及我如何訪問它)?Android在哪裏保存個人數據?

+0

http://stackoverflow.com/questions/785973/what-is-the-most-appropriate-way-to-store-user-settings-in-android - 應用 – Anukool 2013-03-04 11:55:27

+0

這個答案在你的方向: http://stackoverflow.com/questions/785973/what-is-the-most-appropriate-way-to-store-user-settings-in-android-application/786588 #786588 – staaar 2013-03-04 11:55:34

+1

使用加密。並且不要在代碼中對密鑰進行硬編碼,而是從特定設備的特徵中派生出來。 – 2013-03-04 11:56:49

回答

1

AFAIK你不能在Android設備上運行MySQL,但你可以使用SQLitetutorial)。您甚至可以嘗試使用SQLCipher將其存儲在加密數據庫中。雖然我被告知從您的APK中提取訪問密鑰並不難。

當你存儲你的密碼時,確保你對它進行了加密(即使你正在加密數據庫)。以純文本形式存儲密碼通常不是一個好主意;)

無論您做什麼,都不要將其存儲在文本文件中!

0

您可以將詳細信息存儲在android上的SQLdb中,但使用加密保存所有表單詳細信息並僅保留字符串。

你可以在下面的答案中看到一個人做這個完全相同的技術,並使用phoneId進行加密的例子(儘管我不確定它是多麼的安全)。

Is it safe to store username + passwords in a local SQLite db in Android?

+2

使用手機ID是不安全的,因爲任何可以訪問設備上數據庫的人都可以獲取手機ID。 – Shade 2013-03-04 11:57:13

+0

是的,這就是我的想法,我不知道爲什麼在他們建議的答案。 – david99world 2013-03-04 12:00:49

2

您可以保存簡單的txt文件到您的應用程序目錄。一般來說,Android爲每個應用程序分配一個唯一的uid。每個應用程序都有自己的模式660的應用程序目錄。所以其他應用程序不能訪問其內容。爲了編寫自己的應用程序目錄,你可以使用下面的代碼:

String filename = "myfile"; 
String string = "Your security content"; 
FileOutputStream outputStream; 

try { 
    outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
    string = encrypt(string); 
    outputStream.write(string.getBytes()); 
    outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

然而,如果目標設備是植根設備,其他應用程序可以訪問您的文件。所以更好的方法是加密數據,並將其保存到應用程序目錄中。

對於數據庫方法,它有同樣的問題,您可以定義自己的內容提供者而不導出它,但它仍然存在於根設備上。因此,無論您選擇什麼,寫入txt文件或將其存儲在數據庫中,首先需要對其進行加密。

+0

告訴我爲什麼在發佈我的答案後2秒內downvote。 – StarPinkER 2013-03-04 11:58:01

3

在Android應用程序中存儲個人數據的最佳方式是使用shared mode的共享首選項,這樣任何人都無法訪問除應用程序之外的數據。 欲瞭解更多詳情,請參閱Android開發者有關共享偏好的提示here.