java - 加密文件或字符串安全 android

标签 java android security encryption aes

我目前在我的应用程序中遇到安全问题。 我的应用程序每 10 分钟记录一次用户的 GPS 位置,并在 12 小时后将数据发送到服务器。 我目前正在将用户的位置保存在内存中的 *.txt 文件中。 现在,我需要保护此文件,以便它只能在我的应用程序中进行编辑,这样用户就无法破解它并更改记录的 gps 位置。

我读过有关加密字符串或文件本身的内容,但这是我的问题。 整个 stackoverflow 的人都不建议对密码进行硬编码,即使使用代码混淆也是如此。 我还能如何保护此文件上的数据?自己使用 ProGuard + 代码混淆(位移位、数学运算等)不足以将密码保存在我的代码中? 任何评论表示赞赏,我需要这是安全的,因为数据必须保持不变。 谢谢!!

最佳答案

如果密码在内存中,即使未加密/混淆,如果用户知道他们在做什么,它也可以恢复和/或滥用。

要解决此问题,您应该让应用程序从服务器请求一个 key 以用于加密。 key 本身应该使用 SSL 加密/签名,以便您可以保证您的服务器发送了 key ,并且 key 不会在此过程中被拦截。立即从内存中清除 key ,使其不会保留在设备上。

这个解决方案仍然不是万无一失的。用户可以对应用程序进行逆向工程并告诉它使用任何旧 key 。只要您将坐标存储在设备上,它们就会以某种方式受到攻击。使用我刚才描述的技术,攻击者仍然可以欺骗 GPS 源,或使用重播攻击。为防止这种情况,您需要为每次保存使用不同的 key ,并在服务器上跟踪 key 的应用顺序。

更安全的方法是根本不在设备上存储位置。一旦它们可用,请尽快上传它们,使用加密/签名 SSL 方法来防止篡改。在服务器上对它们进行完整性检查以排除不良的欺骗作业。当信任来自设备的数据(例如 GPS 坐标)时,您将面临被聪明的攻击者操纵的风险。

关于java - 加密文件或字符串安全 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15142960/

相关文章:

java - ActionBarActivity getSupportActionBar().hide() 抛出 NullPointerException

android - 接收 Firebase 通知不规律

security - 在ELK群集上应用安全性-身份验证问题

javascript - 如果验证码不安全,可以使用什么代替?

java - 如何在我的 Java 程序中使用配置文件?

java - 在Java中,如何将自纪元以来的秒数转换为自1970年1月1日以来的毫秒数,00 :00:00 GMT

java - 使用 random.nextBoolean() - 随机生成器

java - 使用 Maven 模块化项目

android - Android Widget 中的可滚动 TextView

rest - 我应该通过 HTTP Header 还是 Post body 作为 JSON 将凭据传递给 REST Api?