为什么 openssl 命令行中的 Base64 编码不同于 android.util.Base64

Why Base64 encoding in openssl commandline differs from android.util.Base64

我想了解为什么 openssl 命令行中的编码与通过 android.util.Base64

进行的编码之间存在差异

// data.out 的内容 = "a"

openssl base64 -A -in data.out -out data_enc.out

猫data_enc.out

YQo=

我尝试使用 android 的 Base64,但无法获得相同的输出。我尝试使用差异字符集和所有可能的标志值。

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

但 none 的输出与来自命令行的输出匹配。有人可以阐明我所缺少的东西吗?

您的文本文件在文件末尾包含一个换行符。要在 Android 上获得相同的输出,请将 \n 添加到您的输入字符串:

 String str = "a\n";