Base64編碼在電子郵件中很常見,Foxmail、Outlook等郵件用戶代理發郵件時進行SMTP驗證,就是輸入base64編碼格式的用戶名和密碼進行驗證的,而郵件的主體內容和附件都很普遍的使用base64編碼進行傳輸。
在使用telnet工具測試發郵件的時候,如果遇到需要驗證情況,實用的base64編碼工具就成為必要了。我在另一篇文章裡談到可以使用PHP函數來實現,這裡介紹更實用的Linux工具:base64
RHEL5系統的base64工具是coreutils安裝包裡的,一般Linux系統都已安裝。下面舉一些實例來說說如何使用base64,以及相關的注意事項。
這是測試文件file,內容就只有一行字符串"snailwarrior"。
[root@pps ~]# cat file
snailwarrior
1、給文件file進行base64編碼,並打印到標准輸出
[root@pps ~]# base64 file
c25haWx3YXJyaW9yCg==
也可以這樣:
[root@pps ~]# cat file | base64
c25haWx3YXJyaW9yCg==
2、從標准輸入讀取文件內容,base64編碼並打印到標准輸出
[root@pps ~]# base64
snailwarrior
c25haWx3YXJyaW9yCg==
我是輸入snailwarrior,回車,然後按Ctrl+D結束文件輸入的。
【注意】如果我不輸入回車,連續輸入兩次Ctrl+D,看看效果如何:
[root@pps ~]# base64
snailwarriorc25haWx3YXJyaW9y
可以看出,編碼出來的字符串是:c25haWx3YXJyaW9y
我的神!兩種方式編碼出來的結果不一樣啊!繼續往下測試。
3、對字符串"snailwarrior"編碼,並打印到標准輸出
[root@pps ~]# echo "snailwarrior" | base64
c25haWx3YXJyaW9yCg==
這個結果跟前面"cat file"和輸入snailwarrior按回車再按Ctrl+D的情況是一樣的。為什麼不按回車直按兩次Ctrl+D的結果不一樣呢?我們再來看看下面這個例子:
[root@pps ~]# echo -n "snailwarrior" | base64
c25haWx3YXJyaW9y
你是不是驚訝的發現“緣由”了呢?
echo -n 選項沒有輸出字符串結尾的'\n'換行字符,因此字符串"snailwarrior"精確的base64編碼是"c25haWx3YXJyaW9y",可以用PHP函數來檢驗哦。文件方式等進行的"snailwarrior"字符串編碼都帶入了對'\n'的編碼,因此,不小心就會發生莫名的編碼錯誤哦。
4、Base64解碼
[root@pps ~]# echo "snailwarrior" | base64 | base64 -d
snailwarrior
base64: invalid input
[root@pps ~]# echo -n "snailwarrior" | base64 | base64 -d
snailwarriorbase64: invalid input
【注意】RHEL5自帶的base64工具有BUG,base64解碼時莫名出錯:base64: invalid input。我們可以在這裡下載一個base64源碼包自己編譯:
http://www.fourmilab.ch/webtools/base64/base64-1.5.tar.gz
我測試過沒問題:
[root@pps base64-1.5]# echo "snailwarrior" | ./base64 | ./base64 -d
snailwarrior
[root@pps base64-1.5]# echo -n "snailwarrior" | ./base64 | ./base64 -d
snailwarrior[root@pps base64-1.5]#