如何在Android设备上安全地保存SharedPreference?

时间:2012-10-01 17:22:42

标签: android encryption obfuscation sharedpreferences proguard

我有一些SharedPreferences,我希望尽可能安全地保存在设备上。我对安全性一无所知,但我从一些研究中发现,我想要的是一种叫做“混淆器”的东西。是对的吗?这与“加密”有什么不同,还是我想同时做?我还发现我可以使用AESObfuscatorProGuard。有什么区别?还有更多的选择吗?我应该使用哪个?

我显然对安全性很陌生,所以任何教程或其他参考资料都会有所帮助。

4 个答案:

答案 0 :(得分:4)

在这种情况下,Obfuscator将不会为您做任何事情,因为它实际上只是将变量重命名为非人类可读的名称。

您要做的是在将数据保存到SharedPreferences时加密数据,并在从中读取数据时对其进行解密。

这个想法Encrypted SharedPrefs的一个例子,我不能说我之前没有使用它的效率。

答案 1 :(得分:2)

链接的AESObfuscator使用静态密钥对字符串进行加密,以便将它们保存到共享的首选项中,并且不会立即显示它们是什么。这与代码混淆器(如ProGuard)不同,后者会破坏代码中的方法和变量名称,使其更难进行逆向工程。它被称为'混淆'而不是'加密'因为密钥在应用程序中,并且它很容易反转(通过提取密钥和解密)。共享的首选项混淆将使得更难以阅读和修改字符串,但并非不可能。如果您对该级别的保护没有问题,请使用此方法。使用代码混淆也是一个好主意,所以你想要同时使用它们。

使“无法”解密字符串的唯一受支持的方法是让用户在每次使用应用程序时输入密码并从中获取加密密钥。这是有效的,但不用说,不是非常用户友好。如果您有兴趣,请参阅some details

答案 2 :(得分:0)

当我需要在Java文件中“隐藏”某些URL时,我对此问题进行了一些研究。在你的情况下,它将是加密你的字符串的某种秘密密钥。存在这样的问题:任何使用某种逆向工程的人都可以读取Java / Android中的整个代码。有时它很容易,像ProGuard这样的混淆器让它变得有点困难。因此,任何人都可以看到您的加密密钥。有些(付费)混淆器甚至可以隐藏Java文件中的字符串,但我不确定它们有多扎实。
简而言之 - 将您的Strings保存在服务器上的设备之外,并在您的设备和服务器(SSL)之间使用某种安全连接。或者您可以要求您的服务器加密并将其发回给您。如果您将密钥保存在设备上,您可能无法确定是否有人会使用逆向工程来阅读它。

答案 3 :(得分:0)

唯一安全的方法是不在设备上保留任何敏感信息 - 如果它在那里,它将被提取,只要它的价值超过某人工作的时间(并且第三世界国家的技术娴熟的孩子真的是便宜,在金钱和丰富的时间)。你可以看看这是如何通过OAuth完成的 - 这项技术允许将第三方应用程序(例如)登录到Twitter而不会影响安全凭证(或应用程序看到它们)

一个好的图书馆是:http://code.google.com/p/oauth-signpost/