Шифрование / дешифрование параметров API - Okhttp & Slim Framework - PullRequest
0 голосов
/ 24 января 2020

Я делаю вызовы API GET / PUT / POST из приложения android. Я искал способ зашифровать параметры и их значения перед их отправкой и расшифровать их на уровне приложений Slim.

Я думаю о шифровании Google KMS симметрии c. Так что вроде разобрался. Итак, мой фактический вопрос заключается в следующем.

  1. Как мне зашифровать параметры и их значения в okhttp ?. Так что если вызов get - что-то вроде этого.

    https://example.com/stack/api/v3/getprofile?userid=123&country=jp&priority=1

    ДОЛЖНО БЫТЬ

    https://example.com/stack/api/v3/getprofile?scrambledtext

  2. Как мне расшифровать на уровне приложения SLIM.

    https://example.com/stack/api/v3/getprofile?scrambledtext

    ДОЛЖНО СТАТЬ (ДО ТОГО, КАК ЕГО ОБРАЩАЕТСЯ СООБЩЕННЫМ МАРШРУТ)

    https://example.com/stack/api/v3/getprofile?userid=123&country=jp&priority=1

Приведенный ниже код даст вам представление о # 1.

    String sendBack = "";
    boolean isFirstQueryParam = true;
    String paramString = "";

    OkHttpClient client = new OkHttpClient();
    Response response;

    Request request = null;
    //Only for NON-GETS
    RequestBody requestBody = null;

    //Add all the headers
    Request.Builder requestBuilder = new Request.Builder();
    addHeaders(requestBuilder, headers);

    if (!method.toString().trim().equals("GET")) {

        requestBuilder.url(GenUtil.getApiEndPoint(context) + route);

        //Add all the POST parameters
        FormBody.Builder formBodyBuilder = new FormBody.Builder();
        // Iterate through the bundle and set them params
        if (params != null && !params.isEmpty()) {
            for (String key : params.keySet()) {
                formBodyBuilder.addEncoded(key, params.getString(key));
            }
        }
        requestBody = formBodyBuilder.build();

        if (method.toString().trim().equals("PUT")) {
            requestBuilder.put(requestBody);
        } else if (method.toString().trim().equals("POST")) {
            requestBuilder.post(requestBody);
        } else if (method.toString().trim().equals("DELETE")) {
            requestBuilder.delete(requestBody);
        }

        request = requestBuilder.build();

    } else {

        // Iterate through the bundle and set them params
        if (params != null && !params.isEmpty()) {
            for (String key : params.keySet()) {

                if (isFirstQueryParam) {
                    paramString = paramString + "?" + key + "=" + params.getString(key);

                } else {
                    paramString = paramString + "&" + key + "=" + params.getString(key);
                }
                isFirstQueryParam = false;

            }
        }

        //*** I COULD PROBABLY do ENCRYPt(paramString) FOR THIS - THE QUESTION
        //*** HOW DO I POST FOR NON-GET METHODS

        requestBuilder.url(GenUtil.getApiEndPoint(context) + route + paramString);

        request = requestBuilder.build();
    }

    try {
        response = client.newCall(request).execute();
        sendBack = response.body().string();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return sendBack;
...