为什么base64/openssl使用填充字符'K'而不是'='

cyb*_*bat 5 base64

我注意到php base64_encode使用'='作为填充字符.根据维基百科,不同类型使用'='或无.但是CLI base64命令以及openssl enc -base64使用"K"作为填充.我正在寻找有关他们使用的原因和实施方式的信息.

echo base64_encode('hello'); // aGVsbG8=
echo hello | base64 -i - // aGVsbG8K
openssl enc -base64 <<< hello   // aGVsbG8K
Run Code Online (Sandbox Code Playgroud)

Mar*_* An 6

它不是填充字符.它是由shell命令添加的换行符.

echo hello | openssl enc -base64 # aGVsbG8K
echo -n hello | openssl enc -base64 # aGVsbG8=
Run Code Online (Sandbox Code Playgroud)

  • @CAMOBAP `=` 是使输出字符为 4 的乘积的填充字符(请参阅:http://en.wikipedia.org/wiki/Base64#Privacy-enhanced_mail)。`echo hello` 在末尾打印(默认情况下)一个换行符,编码后转换为 K 字符。在这种情况下,由于输出字符为 8 (2*4),因此不执行填充。如果在 echo 中使用了 `-n` 标志,则跳过换行符。在这种情况下,输出字符为 7,任何丢失的字符都用 `=` 填充。 (3认同)