通過示例來學習 Bash base64 的編碼和解碼
Base64 編碼方法可以將二進位數據轉換為文本,如此編碼數據可以在任何通信媒介進行傳輸。這種編碼方法主要用於電子郵件加密的過程。
總體而言,Base64 編碼方法是一種二進位到文本的編碼方案,以 ASCII 字元串格式表示 8 位元組的二進位數據。使用這種編碼方法在各種媒介之間傳輸數據時有幾個優勢,尤其是對於那些能可靠地支持文本內容的媒介。因此,Base64 編碼方法在萬維網上被廣泛使用。這種編碼方案最常用於電子郵件附件的編碼上。
根據 Base64 編碼表,二進位數據可以經 Base64 編碼後可以轉換為 64 個不同的 ASCII 字元,包含大寫字母 A
到 Z
,小寫字母 a
到 z
,數字 0
到 9
,以及符號 +
和 /
,這些字元在傳輸和列印上十分便捷。
這 64 個 ASCII 字元代表著從 000000
到 111111
的二進位值。每個非末尾的 Base64 編碼字元恰好代表 6 位二進位值。
Bash base64 的編碼和解碼
句法
在我們提供示例之前,首先介紹 Base64 的基本語法。
base64 [OPTIONs] [INFILE] [OUTFILE]
- 選項(
Option
):參照下面的表格,你可以提供任何的選項或組合多個選項。 - 輸入(
INFILE
):你可以從標準輸入(如命令行)或文件中輸入。 - 輸出(
OUTFILE
):你可以將輸出重定向到標準輸出,如終端或文件中。
選項 | 描述 |
---|---|
-e 或者 --encode |
此選項用於對標準輸入的數據或從文件中讀入的數據進行編碼。這是默認選項。 |
-d 或者 --decode |
此選項用於對標準輸入的數據或從文件中讀入的已 Base64 編碼數據進行解碼。 |
-n 或者 --noerrcheck |
默認情況下,Base64 在解碼數據時,會自動檢查是否有錯誤。你可以使用該選項在解碼時忽略檢查。 |
-i 或 --ignore-garbage |
此選項用於在解碼時忽略非字母字元。 |
-u 或者 --help |
此選項用於獲取有關使用此命令的信息。 |
示例 1:基本編碼
在 Linux 中,默認已安裝好 Base64 軟體包。因此,你可以輕鬆地從命令行使用 Base64。要對一個字元串或文本進行編碼,你可以通過管道將其傳遞到 base64
命令,並獲取待編碼的文本。在下面的示例中,對字元串 debugpoint.com
進行了 Base64 編碼。
echo "debugpoint.com" | base64
結果是經過 Base64 編碼後的字元串。
解釋
Base64 編碼方法使用下面的幾個步驟來轉換輸入的數據。首先,每個輸入字元轉換為 8 位二進位值,接著,二進位字元串拆分為一組組 6 位的二進位值,然後,每個 6 位的二進位值被轉換為十進位值。
最後,每個十進位值都通過 Base64 編碼索引錶轉換為 Base64 字元。
在上面的示例中,第一個字元 d
被轉換為二進位 01100100
。前 6 位是 011001
,轉換為十進位是 25
。25
在 Base64 編碼索引表中對應著 Z
。整個輸入的文本流都像如此編碼。請參閱以下編碼過程的示例。
示例 2:基本解碼
要解碼字元串,需要將編碼值傳遞給 base64
命令,選項為 --decode
,它將輸出你之前輸入的字元串。
示例 3:對文本文件進行編碼
示例 1 中的同一命令也可用於編碼文本文件,並將輸出重定向到另一個文本文件。方法如下。
base64 example3.txt > example3-encoded.txt
示例 4:對文本文件進行解碼
要解碼使用 Base64 編碼的文本文件,只需使用 --decode
或 -d
選項,並傳遞文本文件名。
base64 -d example3-encoded.txt
示例 5:對用戶輸入的數據進行編碼
使用 Bash shell 編程,你可以通過終端接收用戶的輸入,並對其進行 Base64 編碼。你需要先編寫一個簡單的 shell 腳本,並在授予可執行許可權後執行。
以下就是一個簡單的示例,它從用戶那裡獲得輸入,然後進行 Base64 編碼,最終顯示編碼的字元串。
#!/bin/bash
#Sample program to take input, encode to base64 and display on terminal
#Example by www.debugpoint.com
echo "Enter text for encoding to base64:"
read input_text
output_text=`echo -n $input_text | base64`
echo "The Base64 Encoded text is: $output_text"
示例 6:用 Base64 進行簡單的身份認證
你可以運用上述的編碼和解碼方法,實現一個簡單的身份驗證系統。你可以讓用戶輸入密碼或密碼,然後將密碼存儲在文件中。或者進行實時比較。
如果存儲的編碼字元串與用戶輸入的文本再編碼的字元串相匹配,則用戶可以通過驗證。雖然這是一種檢查身份驗證的很簡單的方法,但有時這對一些簡單的業務案例很有用。
#!/bin/bash
#Sample program to take input, encode to base64 and display on terminal
#Example by www.debugpoint.com
echo "Type your password"
read pwd1
decoded_text=`echo 'U2lsZW5jZSBpcyBnb2xkZW4h' | base64 --decode`
if [[ $pwd1 == $decoded_text ]]
then
echo "You are a valid user."
else
echo "You are NOT a valid user."
fi
總結
我希望你能通過這些示例,學會 Base64 編碼和解碼的基礎知識。此外,你也了解到 Base64 的內部編碼方式。如果這對你很有幫助,或你還需要有關此主題的其他教程,請在下面的評論區中告訴我吧。
via: https://www.debugpoint.com/bash-base64-encode-decode/
作者:Arindam 選題:lkxed 譯者:chai001125 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive