【问题标题】:Android Retrofit Parameter Encryption and Decryption SHA256Android Retrofit参数加解密SHA256
【发布时间】:2022-01-23 11:34:52
【问题描述】:

在我的应用程序中,我使用的是使用 Retrofit 的 Web 服务。我必须在请求中加密字段(参数)并在 PHP 服务器上对其进行解密。

我必须加密和解密版本参数。

这是我的 RetroApi.java

公共接口 RetroApi {

    @FormUrlEncoded
    @POST("index.php/api/check-version")
    Call<String> getCheckVersion(@Field("version") String version, @Field("app") String app);
    
}

创建 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);

这是 Web 服务调用

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();
        }
    });

请帮助我完成这项工作。

【问题讨论】:

  • 你遇到了什么问题?
  • @AbuYousuf 我必须加密响应并在服务器上解密
  • Encrypt the responseEncrypt the api parameters ?
  • 加密api参数
  • Encrypt the api parameters 遇到什么问题?

标签: android encryption retrofit2 sha256


【解决方案1】:

基本上,您只需使用标准 Android 工具加密您的参数即可。 Here 是一个简单的例子,你可以从它开始。

从 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 专家,但我确信有办法做到这一点。 例如herehere,您可以找到类似密码的Java 和PHP 实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2021-02-25
    • 2013-09-11
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多