0

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

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

4

4 回答 4

4

在这种情况下,混淆器不会为您做任何事情,因为它本质上所做的只是将变量重命名为非人类可读的名称。

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

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

于 2012-10-01T18:12:24.907 回答
2

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

使解密字符串“不可能”的唯一受支持的方法是让用户在每次使用应用程序时输入密码并从中派生加密密钥。这可行,但不用说,它对用户不是很友好。如果你有兴趣,这里有一些细节

于 2012-10-02T03:12:04.097 回答
0

唯一安全的方法是不在设备上保留任何敏感信息——如果它在那里,它将被提取,只要它的价值超过工作人员的时间(第三世界国家的熟练孩子真的很便宜,在金钱和丰富的时间)。您可能会看到这是如何使用 OAuth 完成的 - 该技术允许将 3rd 方应用程序(例如)登录到 twitter,而不会损害安全凭证(或应用程序曾经看到它们)

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

于 2012-10-01T18:20:58.757 回答
0

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

于 2012-10-01T18:02:24.477 回答