Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在哪里存储我的密钥以在移动设备上加密数据?_Android_Security_Encryption_Apk - Fatal编程技术网

Android 在哪里存储我的密钥以在移动设备上加密数据?

Android 在哪里存储我的密钥以在移动设备上加密数据?,android,security,encryption,apk,Android,Security,Encryption,Apk,我不明白当黑客进入一个移动应用程序时,他能看到和看不到什么,例如android。他反编译.apk,然后看到一些.class文件。例如,如果我加密文件中的一个密钥/值对,我仍然需要从代码中调用该密钥,并且如果黑客可以看到代码,那么无论该密钥是否加密,他都会知道我调用的是哪一个密钥 我的目标是在我的应用程序中保留一些加密字符串,例如我应用程序的twitter帐户Id。 有些主题谈到“要读取的私钥,什么是用公钥加密的”,但如果我使用它们,我仍然需要将它们存储在我的应用程序中的某个位置…您可以在启动应用

我不明白当黑客进入一个移动应用程序时,他能看到和看不到什么,例如android。他反编译
.apk
,然后看到一些
.class文件
。例如,如果我加密文件中的一个密钥/值对,我仍然需要从代码中调用该密钥,并且如果黑客可以看到代码,那么无论该密钥是否加密,他都会知道我调用的是哪一个密钥

我的目标是在我的应用程序中保留一些加密字符串,例如我应用程序的twitter帐户Id。
有些主题谈到“要读取的私钥,什么是用公钥加密的”,但如果我使用它们,我仍然需要将它们存储在我的应用程序中的某个位置…

您可以在启动应用程序时从服务器获取密钥。而且也不要在SharedPreference或Sqlite中管理应用内购买详细信息。因为在根设备中,用户可以从根浏览器或sqlite编辑器应用程序中看到数据文件,所以用户可以更改值。

不完全理解您的要求,但经验法则始终是假定客户机不可信。 你必须确保

  • 所有解密都应该在您信任的服务器上完成
  • 客户端永远不能访问解密的数据(除非您希望)。因此,需要直接访问解密数据的代码的任何部分都应该在服务器中
  • 客户端应该只有加密的数据(如果它必须存储数据)
  • 客户端应该无法访问用于加密数据的私钥
如果在您的情况下,您的客户必须能够直接访问关键数据,那么您唯一的办法就是使用模糊处理技术(基本上隐藏您的数据/代码,以使其难以找到/理解)。当然,所有的模糊技术最终都会被一个坚定的黑客打败。你必须决定你的数据有多重要,黑客尝试访问你数据的概率有多大。
举一个极端的例子:使用模糊处理存储你的twitter帐户和密码是非常糟糕的。存储twitter url——可能没那么糟糕。

一个非常有决心的人可以破解它,但破解加密字符串是一件非常痛苦的事情,它将阻止大多数黑客。特别是如果你用ProGuard之类的东西混淆了你的代码


你说得对,对于像twitter一样需要访问互联网的东西,我可以让它进入服务器。但有一件事我不明白:
隐藏数据/code
:他能读懂.class文件,看到我们在保存某些特定数据之前调用了一个特定的相同键吗?例如,我需要检索级别键,我应该怎么做?例如,加密名称“level”,并使用加密的“level”名称调用密钥。。。难道他看不到我加密了“level”并查找了level的加密密钥吗?原则上是的。如果在客户端中存储或创建了“级别”的值。诀窍是使值不是level这一点不那么明显。您可以使用Proguard进行代码混淆。对于字符串,您可能必须尝试其他人建议的方法。此外,您可以查看或尝试确保客户端未被修改。对于In-apps,您的意思是我们必须将每个用户及其In-apps对象添加到数据库中吗?我正在寻找创建一个应用程序用于离线…只要检查用户是否购买了任何项目或没有在每次启动应用程序,所以如果黑客更改您的数据从SharedRef。或sqlite比用户拥有的原始数据没有改变一个。要检查购买的物品,请参阅@SanketKacghela的第3点,谢谢,他不能读取.class文件并根据自己的需要进行更改吗?例如更改从服务器收到的结果,或访问指定不同应用程序中的不同的
公共枚举
?谢谢,是的,实际上我可能更喜欢模糊处理,而不是100%安全,因为我希望应用程序脱机使用,但在应用程序中。。。有一件事我不明白,你把密钥写在代码中,黑客难道不能访问代码,让他用密钥、要解密的私钥和你用来加密的方法读取字符串吗?