【问题标题】:What is the difference between base64 and MIME base 64? [closed]base64 和 MIME base 64 有什么区别? [关闭]
【发布时间】:2017-12-25 08:30:55
【问题描述】:

我只是花了太多时间来敲击 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 -MMIME::Base64 -0777pe'print encode_base64($_)'

标签: python linux shell perl mime


【解决方案1】:

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

要将不带换行符的字符串传递到命令的标准输入,请使用printf 命令,例如:

$ printf %s ASDF1234asdf | base64
QVNERjEyMzRhc2Rm

【讨论】:

    【解决方案2】:

    base64编码没有不同,只是在末尾编码换行符,或者不:

    $ perl -MMIME::Base64 -e 'print encode_base64("ASDF1234asdf")'
    QVNERjEyMzRhc2Rm
    $ perl -MMIME::Base64 -e 'print encode_base64("ASDF1234asdf\n")'
    QVNERjEyMzRhc2RmCg==
    $ echo -ne "my_user_name@my_domain.com" | base64
    bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20=
    $ echo -ne "my_user_name@my_domain.com\n" | base64
    bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20K
    

    【讨论】:

    • 这是一个非常简洁的演示。我在 echo 命令中添加了换行抑制和转义字符解释,以产生与 OP 相同的结果。 (并赞成)
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2019-03-06
    • 1970-01-01
    • 2010-12-10
    • 2011-09-20
    相关资源
    最近更新 更多