2013-03-04 86 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.