base64和MIME base64有什么区别?

2024-10-04 05:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是花了太多时间在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友好的输出?在


Tags: name服务器commydomainsmtpperlencode
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

这不是Perl与其他所有人的比较;这是一个“使用Bash的<<<构造”与“不做那个”的事情。虽然没有明确地记录(至少在ubuntuxenial的manpage中没有),但是Bash appends a newline to herestrings (the ^{} thing) when passing them to commands。因此,使用<<<调用的所有命令实际上都在编码'ASDF1234asdf\n',而Perl(不是用herestring调用的)只编码'ASDF1234asdf'。不同的输入,不同的输出。在

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

$ printf %s ASDF1234asdf | base64
QVNERjEyMzRhc2Rm

相关问题 更多 >