Linux中國

通過示例來學習 Bash base64 的編碼和解碼

Base64 編碼方法可以將二進位數據轉換為文本,如此編碼數據可以在任何通信媒介進行傳輸。這種編碼方法主要用於電子郵件加密的過程。

總體而言,Base64 編碼方法是一種二進位到文本的編碼方案,以 ASCII 字元串格式表示 8 位元組的二進位數據。使用這種編碼方法在各種媒介之間傳輸數據時有幾個優勢,尤其是對於那些能可靠地支持文本內容的媒介。因此,Base64 編碼方法在萬維網上被廣泛使用。這種編碼方案最常用於電子郵件附件的編碼上。

根據 Base64 編碼表,二進位數據可以經 Base64 編碼後可以轉換為 64 個不同的 ASCII 字元,包含大寫字母 AZ,小寫字母 az,數字 09,以及符號 +/,這些字元在傳輸和列印上十分便捷。

這 64 個 ASCII 字元代表著從 000000111111 的二進位值。每個非末尾的 Base64 編碼字元恰好代表 6 位二進位值。

Base64 Index Table

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

bash base64 encode and decode - example 1

結果是經過 Base64 編碼後的字元串。

解釋

Base64 編碼方法使用下面的幾個步驟來轉換輸入的數據。首先,每個輸入字元轉換為 8 位二進位值,接著,二進位字元串拆分為一組組 6 位的二進位值,然後,每個 6 位的二進位值被轉換為十進位值。

最後,每個十進位值都通過 Base64 編碼索引錶轉換為 Base64 字元。

在上面的示例中,第一個字元 d 被轉換為二進位 01100100。前 6 位是 011001,轉換為十進位是 2525 在 Base64 編碼索引表中對應著 Z。整個輸入的文本流都像如此編碼。請參閱以下編碼過程的示例。

Base64 Encode and Decode – inner working

示例 2:基本解碼

要解碼字元串,需要將編碼值傳遞給 base64 命令,選項為 --decode,它將輸出你之前輸入的字元串。

bash base64 encode and decode - example 2 (decode the same example)

示例 3:對文本文件進行編碼

示例 1 中的同一命令也可用於編碼文本文件,並將輸出重定向到另一個文本文件。方法如下。

base64 example3.txt > example3-encoded.txt

Encode a text file

示例 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"

Custom input - base64 encode and decode using script

示例 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

A Simple Authentication using bash base64

總結

我希望你能通過這些示例,學會 Base64 編碼和解碼的基礎知識。此外,你也了解到 Base64 的內部編碼方式。如果這對你很有幫助,或你還需要有關此主題的其他教程,請在下面的評論區中告訴我吧。

via: https://www.debugpoint.com/bash-base64-encode-decode/

作者:Arindam 選題:lkxed 譯者:chai001125 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國