Android改造参数加解密SHA256
Android Retrofit Parameter Encryption and Decryption SHA256
在我的应用程序中,我通过 Retrofit 使用 Web 服务。我必须在请求中加密字段(参数)并在 PHP 服务器上解密它。
I have to Encrypt and Decrypt version parameter.
Here is my RetroApi.java
public 接口 RetroApi {
@FormUrlEncoded
@POST("index.php/api/check-version")
Call<String> getCheckVersion(@Field("version") String version, @Field("app") String app);
}
Creating instance of RetroApi.java
RetroApi retroApi;
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(logging).build();
Gson gson = new GsonBuilder().setLenient().create();
Retrofit retrofit = new Retrofit.Builder().baseUrl(RetroApp.BASE_URL).addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson)).client(httpClient).build();
retroApi = retrofit.create(RetroApi.class);
Here is the Webservice call
Call<String> getResult = retroApi.getCheckVersion(Constants.SP_APP_VERSION, Constants.SP_APP_NAME);
getResult.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
}
@Override
public void onFailure(Call<String> call, Throwable t) {
t.printStackTrace();
}
});
请协助我完成此任务。
基本上,您可以使用标准 Android 工具简单地加密您的参数。 是一个简单的示例,您可以从中开始。
从 Android 的角度来看,基本上是您需要的一切,除了存储 secret
的方法 - 为此,您可以使用 EncryptedSharedPreferences
之后,您可以将这些加密字符串作为您的 API 参数发送。
您还可以像这样为您的请求创建一个集中式加密工厂:
OkHttpClient okHttpClient = SomeOkHttpImplementation();
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.callFactory(new Call.Factory() {
@Override
public Call newCall(Request request) {
Request encryptedRequest = someFunctionToEncryptRequestOrItsArgs(request);
return okHttpClient.newCall(encryptedRequest);
}
})
.baseUrl(sBaseUrl)
.build();
或使用自定义 Interceptor
如图所示 here
问题是您必须在 PHP 端找到解密它们的方法。我不是 PHP 专家,但我确信有办法做到这一点。
例如 here and here 您可以找到类似密码的 Java 和 PHP 实现。
在我的应用程序中,我通过 Retrofit 使用 Web 服务。我必须在请求中加密字段(参数)并在 PHP 服务器上解密它。
I have to Encrypt and Decrypt version parameter.
Here is my RetroApi.java
public 接口 RetroApi {
@FormUrlEncoded
@POST("index.php/api/check-version")
Call<String> getCheckVersion(@Field("version") String version, @Field("app") String app);
}
Creating instance of RetroApi.java
RetroApi retroApi;
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(logging).build();
Gson gson = new GsonBuilder().setLenient().create();
Retrofit retrofit = new Retrofit.Builder().baseUrl(RetroApp.BASE_URL).addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson)).client(httpClient).build();
retroApi = retrofit.create(RetroApi.class);
Here is the Webservice call
Call<String> getResult = retroApi.getCheckVersion(Constants.SP_APP_VERSION, Constants.SP_APP_NAME);
getResult.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
}
@Override
public void onFailure(Call<String> call, Throwable t) {
t.printStackTrace();
}
});
请协助我完成此任务。
基本上,您可以使用标准 Android 工具简单地加密您的参数。
从 Android 的角度来看,基本上是您需要的一切,除了存储 secret
的方法 - 为此,您可以使用 EncryptedSharedPreferences
之后,您可以将这些加密字符串作为您的 API 参数发送。
您还可以像这样为您的请求创建一个集中式加密工厂:
OkHttpClient okHttpClient = SomeOkHttpImplementation();
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.callFactory(new Call.Factory() {
@Override
public Call newCall(Request request) {
Request encryptedRequest = someFunctionToEncryptRequestOrItsArgs(request);
return okHttpClient.newCall(encryptedRequest);
}
})
.baseUrl(sBaseUrl)
.build();
或使用自定义 Interceptor
如图所示 here
问题是您必须在 PHP 端找到解密它们的方法。我不是 PHP 专家,但我确信有办法做到这一点。 例如 here and here 您可以找到类似密码的 Java 和 PHP 实现。