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 实现。