Bash与PowerShell的Base64文本编码结果为何存在差异?
问题解答
为什么PowerShell生成的Base64编码末尾有两个==,而Bash的只有一个=?
核心原因是两个命令处理的原始文本内容不一致:
Bash的
echo会自动追加换行符
在macOS/Linux的Bash环境中,执行echo "Hooked on phonics worked for me"时,echo命令默认会在输出字符串的末尾添加一个换行符(\n)。也就是说,实际被Base64编码的内容是"Hooked on phonics worked for me\n"(原字符串+换行符)。PowerShell仅编码原始字符串
PowerShell里的[System.Text.Encoding]::UTF8.GetBytes("Hooked on phonics worked for me")只提取了双引号内的原始字符串字节,没有额外添加换行符。
再结合Base64的填充规则来看:
Base64编码以3个字节为一组转换为4个Base64字符,如果原始字节数不是3的倍数,会用=补全:
- 无换行的原始字符串UTF-8字节数为31,31除以3余1,需要补2个空字节,对应末尾两个
==。 - 加上换行符后的字节数为32,32除以3余2,需要补1个空字节,对应末尾一个
=。
你可以自行验证:解码PowerShell的结果会得到原字符串,解码Bash的结果则会得到带换行符的版本。
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

