Почему кодировка Base64 в командной строке openssl отличается от android .util.Base64 - PullRequest
0 голосов
/ 25 марта 2020

Я хочу понять, почему существует разница между кодировкой в ​​командной строке openssl и кодировкой, выполняемой через android .util.Base64

// содержимое data.out = "a"

openssl base64 -A -in data.out -out data_en c .out

cat data_en c .out

YQo =

Я пытался использовать android Base64, но не может получить тот же вывод. Я пытался использовать diff charsets и все возможные значения флага.

 String str = "a";
    int[] flags = new int[]{Base64.DEFAULT, Base64.CRLF, Base64.NO_CLOSE, Base64.NO_PADDING,
        Base64.NO_WRAP, Base64.URL_SAFE};
    int count= 0;
    for(int flag: flags) {
      String encStr = Base64.encodeToString(str.getBytes(StandardCharsets.UTF_8), flag);
      android.util.Log.i("CERT_LOG", "UTF_8: " + (count) + " Encoded data value in code " + encStr);
      encStr = Base64.encodeToString(str.getBytes(StandardCharsets.UTF_16LE), flag);
      android.util.Log.i("CERT_LOG",
          "UTF_16LE: "+ (count) + " Encoded data value in code " + encStr);
      encStr = Base64.encodeToString(str.getBytes(StandardCharsets.UTF_16), flag);
      android.util.Log.i("CERT_LOG",
          "UTF_16: "+ (count) +" Encoded data value in code " + encStr);
      encStr = Base64.encodeToString(str.getBytes(StandardCharsets.UTF_16BE), flag);
      android.util.Log.i("CERT_LOG",
          "UTF_16BE: "+ (count) +" Encoded data value in code " + encStr);
      encStr = Base64.encodeToString(str.getBytes(StandardCharsets.US_ASCII), flag);
      android.util.Log.i("CERT_LOG",
          "US_ASCII: "+ (count) +" Encoded data value in code " + encStr);
      encStr = Base64.encodeToString(str.getBytes(StandardCharsets.ISO_8859_1), flag);
      android.util.Log.i("CERT_LOG", "ISO_8859_1: "+ (count++) +" Encoded data value in code " + encStr);
    }

Но ни один из выводов не соответствовал выводам из командной строки. Может кто-нибудь пролить свет на то, что мне не хватает.

1 Ответ

1 голос
/ 25 марта 2020

Ваш текстовый файл содержит перевод строки в конце файла. Чтобы получить тот же вывод для Android, добавьте \ n к вашей входной строке:

 String str = "a\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...