为什么 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";
我想了解为什么 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";