Base64 не кодирует всю строку - PullRequest
0 голосов
/ 18 февраля 2019

Когда я кодирую текс, по какой-то причине он обрезает часть строки ... В чем может быть проблема?

        DateFormat dateFormat =
                new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a", Locale.ENGLISH);
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR,+ 9);
        String server_time = dateFormat.format(calendar.getTime());
        String wmsAuthSign = "server_time=" + server_time + "&hash_value=U2QK9TLB55JWTZr3OKZHtg==&validminutes=120";
        wmsAuthSign = "?wmsAuthSign=" + Base64.encodeToString(wmsAuthSign.getBytes(), Base64.DEFAULT);

Я отправляю что-то вроде этого:

server_time=02/18/2019 23:38:43 PM&hash_value=U2QK9TLB55JWTZr3OKZHtg==&validminutes=120

И если вы декодируете закодированный текст, вы получите усеченный результат:

server_time=02/18/2019 23:38:43 PM&hash_value=U2QK9TLB55J

1 Ответ

0 голосов
/ 18 февраля 2019

Из-за RFC-2045 :

(5)   (Soft Line Breaks) The Quoted-Printable encoding
      REQUIRES that encoded lines be no more than 76
      characters long.  If longer lines are to be encoded
      with the Quoted-Printable encoding, "soft" line breaks

строка исходных данных:

server_time=02/18/2019 23:38:43 PM&hash_value=U2QK9TLB55JWTZr3OKZHtg==&validminutes=120

Base64закодировано в строку:

c2VydmVyX3RpbWU9MDIvMTgvMjAxOSAyMzoxMjo1NiBQTSZoYXNoX3ZhbHVlPVUyUUs5VExCNTVK
V1RacjNPS1pIdGc9PSZ2YWxpZG1pbnV0ZXM9MTIw

в точности так, как показано выше: с переносом строки.Но на стороне получателя вы, вероятно, декодируете только первую строку

c2VydmVyX3RpbWU9MDIvMTgvMjAxOSAyMzoxMjo1NiBQTSZoYXNoX3ZhbHVlPVUyUUs5VExCNTVK

, то есть server_time=02/18/2019 23:12:21 PM&hash_value=U2QK9TLB55J

Так что декодируйте на стороне получателя все полученные данные, а не только первую строку.

Или вас могут отправить на сторону получателя только в первой строке закодированного Base64.

Также взгляните на этот ответ Мохаммад Адиль :

На андроиде используйте Base64.NO_WRAP вместо Base64.DEFAULT

...