2017-07-19 39 views
6

Tôi đã dành quá nhiều thời gian đập đầu vào máy chủ SMTP vì nó không thích thông tin đăng nhập được mã hóa base64 mà tôi đang sử dụng. Hóa ra là khi tôi chọn KHÔNG sử dụng perl như rất nhiều hướng dẫn trên internet nói để sử dụng, tôi đã phạm một sai lầm lớn. Tại sao điều này? Tôi nghĩ base64 là một tiêu chuẩn duy nhất.Sự khác nhau giữa base64 và MIME 64 là gì?

xem xét:

$ 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('[email protected]_domain.com')" 
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20= 

$ base64 <<<"[email protected]_domain.com" 
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20K 

Vì vậy, perl là duy nhất trong đầu ra của nó và máy chủ của tôi đòi hỏi như vậy.

Tại sao tôi nhận được kết quả khác?

Làm thế nào để bạn có được đầu ra thân thiện MIME/SMTP với một thứ khác ngoài perl?

+0

Tương đương sẽ là «perl -MMIME :: Base64 -0777pe'print encode_base64 ($ _) '' – ikegami

Trả lời

10

Đây không phải là một Perl so với mọi thứ khác; đây là "việc sử dụng công cụ" so với "không làm điều đó" của Bash's <<<. Mặc dù không được ghi chép rõ ràng (ít nhất không có trong manpage trên Ubuntu Xenial), Bash appends a newline to herestrings (the <<< thing) when passing them to commands. Kết quả là, tất cả các lệnh bạn đang gọi với <<< thực sự mã hóa 'ASDF1234asdf\n', trong khi Perl (mà không được gọi với một tham chiếu) là mã hóa chỉ 'ASDF1234asdf'. Đầu vào khác nhau, đầu ra khác nhau.

Để vượt qua một chuỗi mà không một dòng mới trailing đến đầu vào tiêu chuẩn của một lệnh, sử dụng lệnh printf, ví dụ:

$ printf %s ASDF1234asdf | base64 
QVNERjEyMzRhc2Rm 
5

Không có mã hóa base64 khác nhau, nhưng mã hoá một ký tự xuống dòng ở cuối, hoặc không:

$ perl -MMIME::Base64 -e 'print encode_base64("ASDF1234asdf")' 
QVNERjEyMzRhc2Rm 
$ perl -MMIME::Base64 -e 'print encode_base64("ASDF1234asdf\n")' 
QVNERjEyMzRhc2RmCg== 
$ echo -ne "[email protected]_domain.com" | base64 
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20= 
$ echo -ne "[email protected]_domain.com\n" | base64 
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20K 
+0

Đây là bản trình diễn ngắn gọn. Tôi đã thêm vào sự đàn áp dòng mới và giải thích ký tự thoát khỏi lệnh echo để tạo ra các kết quả giống hệt với OP. (và upvoted) –

Các vấn đề liên quan