python - base64 和 MIME base 64 有什么区别?

标签 python linux shell perl mime

<分区>

我只是花了太多时间在 SMTP 服务器上苦苦思索,因为它不喜欢我使用的 base64 编码凭据。事实证明,当我选择不像互联网上的许多说明那样使用 perl 时,我犯了一个大错误。为什么是这样?我认为 base64 是一个单一的标准。

考虑:

$ perl -MMIME::Base64 -e 'print encode_base64("ASDF1234asdf")'
QVNERjEyMzRhc2Rm

$ base64 <<<"ASDF1234asdf"
QVNERjEyMzRhc2RmCg==

$ python3.6 -m base64 <<<"ASDF1234asdf"
QVNERjEyMzRhc2RmCg==

$ python2.7 -m base64 <<<"ASDF1234asdf"
QVNERjEyMzRhc2RmCg==

$ perl -MMIME::Base64 -e "print encode_base64('my_user_name@my_domain.com')"
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20=

$ base64 <<<"my_user_name@my_domain.com"
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20K

所以,perl 的输出是独一无二的,我的服务器需要它。

为什么我得到不同的结果?

除了 perl,您如何获得 MIME/SMTP 友好的输出?

最佳答案

这不是 Perl 与其他人的较量;这是“使用 Bash 的 <<< 构造”与“不那样做”的对比。尽管没有明确记录(至少在 Ubuntu Xenial 的联机帮助页中没有),Bash appends a newline to herestrings (the <<< thing) when passing them to commands .因此,您使用 <<< 调用的所有命令实际上是编码 'ASDF1234asdf\n' ,而 Perl(不使用 herestring 调用)仅编码 'ASDF1234asdf' .不同的输入,不同的输出。

为了将没有尾随换行符的字符串传递给命令的标准输入,请使用 printf命令,例如:

$ printf %s ASDF1234asdf | base64
QVNERjEyMzRhc2Rm

关于python - base64 和 MIME base 64 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45201225/

相关文章:

python - 在 Pandas 中阅读维基百科表格时数值呈现不当

linux - 无法在 Linux 上安装 HTK

linux - 从文件名中提取唯一标识

linux - 在 x86_64 上是否有任何分析器可以与 -fomit-frame-pointer 一起使用?

linux - 如何使用 fortran 或 shell 在同一文件中突出显示其右侧的不匹配数据?

linux - bash 获取硬件脚本输出到 .csv 文件

python - 迭代一列中的项目,同时引用另一列中的标签

python - 求和 : Is recursion necessary, 以及递归算法是什么样的?

python - 如何将字符串中的小写字符和大写字符分开?

linux - libf2c.so.2 - main 未定义