Android 在应用程序中隐藏敏感数据

Android 在应用程序中隐藏敏感数据,android,security,retrofit,Android,Security,Retrofit,我正在使用改装请求: @Headers("Authorization: Basic: UsernamePassword") @POST("services/2/something/something") fun createPlan(@Body planData: PlanInfo): Call<Plan> @Headers(“授权:基本:用户名密码”) @邮政(“服务/2/某物/某物”) fun createPlan(@Body planD

我正在使用改装请求:

@Headers("Authorization: Basic: UsernamePassword")
@POST("services/2/something/something")
fun createPlan(@Body planData: PlanInfo): Call<Plan>
@Headers(“授权:基本:用户名密码”)
@邮政(“服务/2/某物/某物”)
fun createPlan(@Body planData:PlanInfo):调用
在我的标题中,我要求以Base64编码发送usrname、密码和字符串。但如果对应用程序进行解码,就不那么难了。 所以我参考了手册:在android应用程序中隐藏敏感数据

但现在当我使用常数的数据时,就像这样:

@Headers("Authorization: "+ConstantsEncrypted.usernamePassword())
@POST("services/2/something/something")
fun createPlan(@Body planData: PlanInfo): Call<Plan>
@Headers(“授权:+ConstantEncrypted.usernamePassword())
@邮政(“服务/2/某物/某物”)
fun createPlan(@Body planData:PlanInfo):调用
我得到一个错误:注释参数必须是编译时常量


那么,我如何才能正确地隐藏这些敏感数据呢?

您不能使用注释方法来实现这一点。以下是我在项目中如何做到这一点

class Authenticator : Authenticator {

    override fun authenticate(route: Route?, response: Response): Request? {

        return response.request().newBuilder()
            .header("Authorization", ConstantsEncrypted.usernamePassword()).build()
    }

}
不要忘记使用
authenticator(authenticator())
将其添加到您的
OkHttpClient.Builder()
实例中,如下所示:

OkHttpClient.Builder().apply {
    writeTimeout(120, TimeUnit.SECONDS)
    readTimeout(120, TimeUnit.SECONDS)
    connectTimeout(120, TimeUnit.SECONDS)
    callTimeout(120, TimeUnit.SECONDS)
    // your code
    // this is where you add your authenticator
    authenticator(Authenticator())
    // more code 
}.build()

Authenticator
来自软件包
okhttp3
。您可以找到有关类的更多信息。

找到了一个解决方案,将标题发送到函数:

fun createPlan(@HeaderMap headers: Map<String, String>,@Body planData: PlanInfo): Call<Plan>
fun createPlan(@HeaderMap headers:Map,@Body planData:plannifo):调用

<代码>请考虑接受答案,如果它对你有用的话!非常感谢您的帮助,我找到了其他更简单的解决方案。