Base64是一種能將任意Binary資料用64種字元組合成字串的方法,而這個Binary資料和字串資料彼此之間是可以互相轉換的,十分方便。在實際應用上,Base64除了能將Binary資料可視化之外,也常用來表示資料加密過後的內容。然而,標準版本的Base64對於URL或是檔案路徑來說可能不是那麼的友善,因為編碼後的Base64資料可能有「+」或是「/」這兩種字元。為了解決這個問題,Base64有個變體稱作「base64url」,會將字元「+」對應到字元「-」(減號),字元「/」對應到字元「_」(底線),且用來padding的「=」字元通常為了節省長度而會被省略。



舉例來說,

qL8R4QIcQ/ZsRqOAbeRfcZhilN+MksRtDaErMA==

以上的這個標準版本的Base64字串,可以轉成如下的「base64url」字串:

qL8R4QIcQ_ZsRqOAbeRfcZhilN-MksRtDaErMA

轉換之後的字串可以無痛被使用在URL/URI或是檔案路徑中。

有關Base16、Base32、Base64的定義,可以查閱RFC4648。

Base64 URL

「Base64 URL」是筆者開發的套件,可以用來將任意資料編碼成base64url字串,或是將base64url字串解碼回原始資料。也可以將現有的Base64字串轉成base64url字串,或是將現有的base64url字串轉成Base64字串。

Crates.io

https://crates.io/crates/base64-url

Cargo.toml

base64-url = "*"

使用方法

若要將任意資料編碼成base64url字串,可以使用「encode」函數。

如果想要將編碼結果串接到現有的字串之後,可以使用「encode_and_push_to_string」函數。

若要將base64url字串解碼回原始資料,可以使用「decode」函數。

如果要將base64url字串解碼回原始資料的結果串接到現有的Vec<u8>結構實體之後,可以使用「decode_and_push_to_vec」函數。

若要將現有的Base64字串轉成base64url字串,可以使用「unsafe_escape」函數。這個函數並不會花費運算資源去檢查Base64字串的正確性。

如果要直接將現有的Base64字串轉成base64url字串,而不產生出新的字串的話,可以使用「unsafe_escape_owned」函數。這個函數並不會花費運算資源去檢查Base64字串的正確性。

若要將現有的base64url字串轉成Base64字串,可以使用「unsafe_unescape」函數。這個函數並不會花費運算資源去檢查base64url字串的正確性。

如果要直接將現有的base64url字串轉成Base64字串,而不產生出新的字串的話,可以使用「unsafe_unescape_owned」函數。這個函數並不會花費運算資源去檢查base64url字串的正確性。