2011-10-18 60 views
13

我想隐藏用户在用户手机中输入的一些数据加密。据我所知,我可以使用密钥/种子值对数据进行加密/解密,但是如果我将密钥值隐藏在代码中,我知道它可以以某种方式找到(例如反编译Java代码)。在Android应用程序中隐藏加密密钥

您有任何建议可以让流程更难吗?

回答

6

这是不可能的隐藏在应用程序的密钥,这样一个机智的黑客将无法将其拉出。您可以尝试混淆密钥并使其难以找到,但始终可以实现。

看到这个:https://www.excelsior-usa.com/articles/java-obfuscators.html#examples

最好的办法是要求用户指定PIN或密码,并使用它作为加密密钥。这样,如果设备丢失或被盗,密钥仍然安全,并且还可以防止某人反编译您的应用程序,并为您的应用程序的所有实例获取加密密钥。

+0

请参阅我的相关问题:http://stackoverflow.com/questions/30951805/encrypt-on-server-side-and-decrypt-on-client-side –

+0

@slayton关于使用密码加密密钥: 是密码将被保存散列,然后散列值将成为关键,或直接将密码用作关键? 只是要求知识 –

2

如果你这样做是对用户名/密码数据,您应该结帐实现一个Authenticator

0

如果加密/解密一切都发生在手机上,一个意志坚定的黑客将能够破解它。您可以通过使用obfustication或(如果适用于您的应用程序)将用户输入添加到加密/解密代码中,使生活更加艰难。

如果你的应用需要网络连接,远程加载一些代码在其他地方运行的服务器,使加密数据所居住的设备上,但关键点在运行时下载它可能是值得的。仍然不能防黑客,但它可以降低被盗设备上机密数据的风险。

1

由于Android上没有任何安全存储(至少为2.2),你就必须自己编写。

做到这一点真的很安全的唯一方法是从用户提供的密码派生的密钥(PBKDF2/RFc2898作为的方式来表示)来加密。 Crypto只与您的密钥一样安全,如果您将它存储在电话上,则有人可以找到并使用它。这使您可以让用户存储密钥,而无需真正记住一个大的AES密钥。

有可能是这样的图书馆为Android。我为windows phone编写了一个,如果你想要如何做到这一点,可以找到here

3

一个的冰淇淋三明治的新功能(Android 4.0版本)是keychain API。从Platform Highlights page(强调我的):

Android 4.0使应用程序更容易管理身份验证 和安全会话。新的钥匙串API和基础加密存储允许应用程序存储和检索私钥以及相应的证书链。 任何应用程序都可以使用钥匙串 API安全地安装和存储用户证书和CA

+0

你知道任何教程/示例代码?!谢谢。 –

相关问题