在Android应用程序中处理机密数据和文本

在Android应用程序中处理机密数据和文本,android,encryption,Android,Encryption,在Android应用程序中,处理机密文本的最佳安全方式是什么 基本结构是(text/int)和它的一些类似变体 该应用程序一次只显示(可读文本/可读整数)的一个选择,所以一次只对很少的几对进行解密 我需要确保提取完整的(text/int)信息实际上是不可能的-如果可能的话:-) 是否有任何标准库/方案来处理此问题 非常感谢 编辑(在此问题上获得一些非常有趣的回答后): 看起来,即使数据被加密了,也可以很容易地从应用程序中获取反编译的代码,并将其与自编的提取例程相结合,从而将所有解密的信息保存到一

在Android应用程序中,处理机密文本的最佳安全方式是什么

基本结构是(text/int)和它的一些类似变体

该应用程序一次只显示(可读文本/可读整数)的一个选择,所以一次只对很少的几对进行解密

我需要确保提取完整的(text/int)信息实际上是不可能的-如果可能的话:-)

是否有任何标准库/方案来处理此问题

非常感谢

编辑(在此问题上获得一些非常有趣的回答后):

看起来,即使数据被加密了,也可以很容易地从应用程序中获取反编译的代码,并将其与自编的提取例程相结合,从而将所有解密的信息保存到一个文件中。由于必须向应用程序的用户提供加密密钥,因此每个人都有可能通过这种方式获取数据


总之,没有真正好的解决方案?

您可以将文本/整数对保存到SharedReference中

因为它不安全,所以您可以在将数据保存到SharedReference之前加密数据,就像Google在包中所做的那样

更多细节可在零件中找到


可以在market_licensing/library/src/com/android/vending/licensing文件夹中的SDK中找到的代码源。

我认为在您的应用程序中可以使用对称加密,并且可以将密钥存储在密钥库中。此密钥应使用密码进行保护。每次运行应用程序时,它都会询问用户密码。如果密码正确,则从密钥库中提取密钥并用于解密数据。在这种情况下,存储数据(文本/整数对)的位置没有区别,因为所有数据都将被加密。对于Android SDK,请查看包java.security和类java.security.KeyStore


若您想为应用程序提供不希望提取的数据,那个么若您使用Java编写,模糊处理是一种可能的解决方案。如果您想用C/C++编写此功能,请使用Android NDK。

请您向想要保护您的文本的人解释更多信息。您应该考虑如何保护您的加密密钥。如果任何拿起设备的人都可以进入你的应用程序并阅读它,那么加密这些东西有什么用呢?你打算在你的应用程序中提示输入密码吗?事实上,我想保护它不被任何人试图获取这些有价值的信息——因为这对同一领域的许多其他应用程序都很有用,比如某些词汇表。-关于加密密钥!这实际上是一个非常有效的观点-直到现在我使用了我自己的加密类-但这可以相对容易地在Android上进行反向工程,我发现-只需反编译应用程序代码就可以轻松获得大量信息-我真的很惊讶。在C/C++中不是这样的。每个拥有密码的人都可以很容易地解码所有信息,然后,我必须找到一个替代方案!请记住,即使您使用C/C++它也可以很容易地由具有足够技能的人进行反向工程。但是,如果是Java代码,这是非常容易的。如果我理解正确,那么仍然可以通过密码(我需要提供给所有用户)相对容易地获得加密密钥。使用加密密钥,用户可以访问数据……如果用户可以访问解密的数据(即使是一对),那么她/他可以简单地一对一对地复制所有解密的数据(使用脚本或简单地一对一对地复制)。据我所知,你只是想强化这个过程。若确实如此,那个么正如我建议的那个样,您可以将此功能放入本机代码(使用NDK的C/C++代码)中,并尝试隐藏其中的数据提取。分解比分解更难。好吧,我现在明白你的意思了!在这里,使用原生C似乎是最好的方法。顺便问一下,当你说:“如果一个用户可以访问解密的数据(甚至一对),那么她/他可以简单地复制所有解密的数据对…”时,你能解释一下吗?为什么?如果您向用户显示解密的数据,他/她总是可以复制该数据(例如,他/她可以在他/她的计算机上的另一个文件中键入相同的数据)。这是所有DRM方法的基本问题……那么你的意思是,用户可以通过锁定到适当的应用程序例程来“生成”所有解密的条目,并以某种方式枚举条目?不管怎么说,Java从来没有这样做过,向反编译的Java应用程序添加自己的代码有多容易/困难?