我有一个URL,用我的数据返回JSON字符串。现在,我想保密这些数据,所以只有我的Android应用程序可以显示它。
我的第一个想法是使用私钥(在服务器端)对数据进行编码,并在应用程序中存储相同的私钥,以便解码消息。但是,攻击者(用户)可以解析.apk并获取私钥。
答案 0 :(得分:2)
这通常无法做到:如果用户需要查看数据,他们必须能够对其进行解密等。您可以通过不将数据存储在磁盘等上来使其变得更难,但确定的用户/ attacker可以转储内存,使用调试器等来查看数据。考虑一下您想要保护哪些威胁,然后决定一个行动方案。
如果您只希望自己的应用能够下载数据,则需要使用某种身份验证+ SSL。如果您在应用程序中对密钥或密码进行硬编码,则提取它非常容易,因此不会对您造成太大影响。如果您让用户每次使用该应用程序时输入密码,他们将很快感到沮丧,并留下一堆一星级评级。一个中间立场是使用某种基于令牌的身份验证,例如OAuth(或ClientLogin,如果你真的必须,但它已被弃用)并让用户使用他们现有的帐户进行身份验证,这样他们就不会必须注册并记住另一个密码。大多数Android设备已经设置了Google帐户,因此您可以使用它,但这需要其他权限和用户同意(确认对话框)。
答案 1 :(得分:1)
有些混淆器比其他混淆器要好得多,但它可以保护代码免受逆向工程,而不会看到数据,它可以保护您免受非动机黑客的攻击,但不会产生太多其他问题。
如果您试图保护数据免受已成功反编译/重新编译代码的人的攻击,那么除非用户使用未存储在设备上并用于加密的密码对其进行授权,否则数据永远不会处于清除状态/动态解密数据。
我认为最简单的方法是使用密码保护的HTTPS会话进行数据传输,然后使用相同的NEVER TO STORED密码即时加密/解密,或使用相同的NEVER TO存储encrypted in SQL存储密码。
这可以变得非常复杂,取决于你真正想要做的事情,它真正需要的安全性以及你在服务器端有多少控制权等等。网上有很多更详细的内容,{{ 3}}
如果您确实想要自定义,那么Android几乎拥有安全的密钥交换协议,私有/公共密钥支持以及许多一般的加密支持,所以这一切都可行,但我不确定我会尝试自己动手你对所有的协议和正确的使用都很满意。
人们通常不需要他们认为的安全性,但如果您愿意投入基础设施并花时间审查它,那么您可以获得相当安全的保障。