繁体   English   中英

有没有更安全的方式将敏感字符串存储在Android项目中?

[英]Is there a more secure way to store sensitive string in an Android project?

在我的Android项目中,我想保持我的Web服务地址未知。 我将链接存储如下:

private final String SERVICE_LINK = "mywebservicelink..."

但是,因为我看到可以对APK进行反编译,所以我想知道是否可以知道此链接。

如何安全存放?

谢谢。

您可以在gradle.properties设置敏感字符串

https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties

例如:

gradle.properties (通常位于根项目中)中,您可以定义:

SERVICE_LINK = "mywebservicelink"

然后在您的应用程序的build.gradle

android {
   ...
   defaultConfig {
       resValue "string", "service_link", SERVICE_LINK
   }
   ...
}

然后,此服务链接将在您的资源中作为R.string.service_link 也就是说,您可以通过执行以下操作简单地获取价值:

getString(R.string.service_link);

编辑1:

如果您询问如何在APK中隐藏字符串,则可以使用ProGuard。 但是,请注意。 不管您在源代码中放入什么内容,都无法100%保证不能对其进行反向工程。 ProGuard会混淆您的代码,这将大大增加反向工程的难度。

有关更多信息,该主题很棒: 如何避免对APK文件进行反向工程?

您可以在执行一些操作后分配SERVICE_LINK变量的值,而不是直接分配。 例如,使用具有几个无意义的字符串的字符串操作,从某些特定位置获取字符或子字符串,从通过某些算术运算获得的ASCII代码中获取一些字符等可能对此目的有所帮助。

这提供了一种复杂性,因此第三方无法轻易找到您的不变价值。 他们可能认为这是一个随运行时间变化的动态值,或无关紧要的东西。 但是,如果直接在“”中,则很容易找到。

根据经验,不能隐藏任何网络地址。

任何正在搜索Web服务,地址或相关内容的人都可以监视自己的网络并捕获软件包。

主机的域或IP将始终清晰可见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM