2012-03-19 58 views
1

我想創建一個文件,其中存儲一些數據,只能通過我的應用程序訪問。外部用戶應該無法訪問此文件或對其進行任何更改。我將存儲一個密鑰在需要時可由應用程序訪問的文件中。一個應用程序的私人文件

+0

你的問題是什麼呢? – drulabs 2012-03-19 07:12:28

+0

@KKD四重問號是怎麼回事?我相信提問者很清楚要知道他應該在哪裏存儲數據到只能通過他的應用程序訪問的私人位置。 – josephus 2012-03-19 07:40:01

+0

對不起....應該提到的問題。 (請不要詢問有關四次停站。) – drulabs 2012-03-19 08:31:56

回答

1

要創建應用程序專用文件(其他應用程序不可讀取),應使用Context.openFileOutput()並標記爲MODE_PRIVATE

如果您擔心可以將返回的InputStream包裝到CiperOutputStream中並加密內容。

如果要以標準加密格式(X.509或PKCS#12)存儲密鑰,則可以使用ICS中引入的新KeyChain API。

3

使用Environment.getDataDirectory(), http://developer.android.com/reference/android/os/Environment.html#getDataDirectory()

這給出了一個文件對象,它是通向一個私人的,應用程序特定的數據目錄。其中創建的文件由您應用的用戶ID所有,從而阻止任何其他應用訪問它們。

File myPrivateFile = new File(Environment.getDataDirectory(), context.getPackageName() + File.separator + "secret.txt"); 

請注意,如果設備已經生根,所有投注都將關閉。根進程可以讀取設備上的任何文件。您所能做的最好的只是設備用戶的存儲信息。這樣,如果它被破壞,只有一個用戶帳戶被盜用。換句話說,不要存儲證書,密鑰,訪問令牌等,這將允許惡意代理訪問可以爲其他用戶竊取數據的服務器。

+0

有關Android安全性的更多信息,請參閱此處:http://developer.android.com/guide/topics/security/security.html – Sparky 2012-03-19 07:23:44

+0

不正確,Environment.getDatDirectory返回Android的數據目錄(通常是/ data/data )。這不是特定於應用程序的。 – 2012-03-19 08:34:04

+0

@NicStrong,這可以在我的應用程序之外訪問,也許通過使用像文件瀏覽器這樣的應用程序? – 2012-03-19 11:33:36

1

爲什麼不把它存儲在SharedPreference

讓您SharedPreference私人你的活動通過調用..

getSharedPreferences(yourfile, MODE_PRIVATE); 

這將確保只有你Activity可以訪問該SharedPreference

+0

,因爲他詢問是否存儲文件,而不是鍵值對。 – 2012-03-19 07:30:01

+0

此外,SharedPreference也可以通過root訪問進行訪問。 – josephus 2012-03-19 07:36:41

0

最好的辦法是存儲一個加密文件並對其進行解密,這樣即使根植的手機即使有權訪問它也無法讀取您的數據。當然,這是一個雞雞蛋的情況(你將在哪裏存儲加密文件的密鑰),唯一比將密鑰放入變量更好的方法是使用一些不太明確的方法生成密鑰運行時(參見this

1

要打開一個專用app文件夾的文件時,可以使用此文件路徑:

File myFilePath = new File(getContext().getFilesDir() + File.separator + "myFile") 

您可以檢查文件是否存在if(myFilePath.exists()) ...

到一個文本文件保存到私人app目錄

FileOutputStream fos = null; 
try { 
    fos = getContext().openFileOutput("myFile",Context.MODE_PRIVATE); 
} catch (FileNotFoundException e) { } 

try { 
    fos.write(myTextString.getBytes()); 
} catch (IOException e) { } 

try { 
    fos.close(); 
} catch (IOException e) { } 

,將圖像保存到私人app目錄:

try { 
    myBitmapImage.compress(CompressFormat.JPG, 90, 
            openFileOutput("myimage.jpg", MODE_PRIVATE)); 
} catch (Exception e) { } 
相關問題