MIME::Base64 - 編碼和解碼 base64 字串
use MIME::Base64;
$encoded = encode_base64('Aladdin:open sesame');
$decoded = decode_base64($encoded);
此模組提供函式,用於將字串編碼和解碼成 RFC 2045 - MIME (多用途網際網路郵件擴充功能) 中指定的 base64 編碼。base64 編碼旨在以不必人類可讀的形式表示任意序列的八位元組。使用 US-ASCII 的 65 個字元子集 ([A-Za-z0-9+/=]),讓每個可列印字元可以表示 6 個位元組。
提供以下主要函式
透過呼叫 encode_base64() 函式來編碼資料。第一個參數是要編碼的位元組字串。第二個參數是要使用的行尾序列。它是選用的,預設為「\n」。傳回的編碼字串會分成每一行不超過 76 個字元,而且會以 $eol 結尾,除非它是空的。如果您不希望將編碼字串分成多行,請傳遞一個空字串作為第二個參數。
如果 $bytes 包含編碼超過 255 的字元,函式會發生「子常式輸入中出現寬字元」的錯誤。base64 編碼僅定義給單位元組字元。使用 Encode 模組來選擇您想要的位元組編碼。
透過呼叫 decode_base64() 函數來解碼 base64 字串。此函數會接收一個引數,也就是要解碼的字串,並傳回已解碼的資料。
任何不屬於 65 字元 base64 子集的字元都會被自動忽略。在 '=' 填補字元之後出現的字元永遠不會被解碼。
如果您不想將這些常式匯入您的命名空間,您可以呼叫它們為
use MIME::Base64 ();
$encoded = MIME::Base64::encode($decoded);
$decoded = MIME::Base64::decode($encoded);
預設未匯出的其他函數
根據「URL 應用程式」[1] 的 base64 架構編碼和解碼。這是 base64 編碼的變體,它不使用填補、不將字串斷成多行,並使用字元「-」和「_」取代「+」和「/」,以避免使用保留的 URL 字元。
傳回編碼字串的長度,而不會實際編碼它。這會傳回與 length(encode_base64($bytes))
相同的值,但應該會更有效率。
傳回解碼字串的長度,而不會實際解碼它。這會傳回與 length(decode_base64($str))
相同的值,但應該會更有效率。
如果您要編碼一個大型檔案,您應該將它編碼成 57 位元組的倍數區塊。這可確保 base64 行對齊,且您不會在中間結束填補。57 位元組的資料會填滿一個完整的 base64 行 (76 == 57*4/3)
use MIME::Base64 qw(encode_base64);
open(FILE, "/var/log/wtmp") or die "$!";
while (read(FILE, $buf, 60*57)) {
print encode_base64($buf);
}
或者如果您知道您有足夠的記憶體
use MIME::Base64 qw(encode_base64);
local($/) = undef; # slurp
print encode_base64(<STDIN>);
與命令列相同的方法
perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' <file
如果每一行都包含四個 base64 字元的倍數,則解碼不需要 slurp 模式
perl -MMIME::Base64 -ne 'print decode_base64($_)' <file
Perl v5.8 和更新版本允許字串中使用延伸 Unicode 字元。此類字串無法直接編碼,因為 base64 編碼僅定義為單位元組字元。解決方案是使用 Encode 模組來選擇您要的位元組編碼。例如
use MIME::Base64 qw(encode_base64);
use Encode qw(encode);
$encoded = encode_base64(encode("UTF-8", "\x{FFFF}\n"));
print $encoded;
版權所有 1995-1999、2001-2004、2010 Gisle Aas。
此函式庫是免費軟體;您可以在與 Perl 相同的條款下重新散布或修改它。
遠距基於 Martijn Koster <m.koster@nexor.co.uk> 和 Joerg Reichelt <j.reichelt@nexor.co.uk> 編寫的 LWP::Base64,以及 Hans Mulder <hansm@wsinti07.win.tue.nl> 張貼到 comp.lang.perl <3pd2lp$6gf@wsinti07.win.tue.nl> 的程式碼
XS 實作使用來自 metamail 的程式碼。版權所有 1991 Bell Communications Research, Inc. (Bellcore)