在 Python 中解碼 Base-64 資料
本文旨在解釋如何解碼 Base64。我們將檢視解碼 Base64 資料的程式碼,然後嘗試 Base64 影象解碼。
在 Python 中演示解碼 Base64 資料
Base64 解碼是一個五步過程,如下。
-
取 base64 格式的字串,轉換成對應的十進位制形式,按照 base64 解碼轉換表。
-
將這些十進位制數轉換為 6 位二進位制。
-
轉換後,這些 6 位二進位制需要分離成 8 位二進位制表示格式。
-
這些 8 位二進位制數需要再次轉換為十進位制形式。
-
最後,這些十進位制數字需要轉換為相應的 base64 編碼字母。
參考下面的例子。
假設我們有一個 Base64 編碼的字串 U3Vubnk=
,它必須經過 Base64 解碼。第一步需要將其轉換為十進位制形式。
20 55 21 46 27 39 36=
這些十進位制字元需要轉換為它們的 6 位二進位制形式。
010100, 110111, 010101, 101110, 011011, 100111, 100100, 00
將其分離為 8 位:
01010011, 01110101, 01101110, 01101110, 01111001, 00000000
最後一組附加了 4 個額外的零以使其成為 8 位。它不影響結果。現在,這些 8 位二進位制文件需要轉換為十進位制格式。
83 117 110 110 121 0
最後,我們將使用標準轉換表將這些十進位制數字轉換為相應的字母。
S u n n y
在 Python 中手動解碼 Base64 資料
這些是在 Python 中手動解碼 Base64 的步驟。
-
匯入 Base64 庫包。這個庫包有助於在 Python 中編碼和解碼 Base64 數字。
-
宣告一個字串變數
input_string
並將編碼值’U3Vubnk=‘作為輸入。 -
變數
base64_converted_string
採用值 ‘U3Vubnk=’ 並將其轉換為 ASCII 值。 -
在第四步中,我們使用變數
decode
將 ASCII 值轉換為它們的 Base64 值。下面的語法將 ASCII 值轉換為它們的 Base64 值。``text
base64.b64decode(base64_converted_string) -
最後一步,變數
decimal_converted_string
用於將 Base64 值解碼為相應的 ASCII 字元。語法:
variable_name.decode("ascii")
在下面的程式中,decode
是儲存 Base64 解碼值的變數。我們需要列印變數 decimal_converted_string
來檢視解碼結果。
程式碼:
import base64
input_string = "U3Vubnk="
base64_converted_string = input_string.encode("ascii")
decode = base64.b64decode(base64_converted_string)
decimal_converted_string = decode.decode("ascii")
print(decimal_converted_string)
輸出:
Sunny
在 Python 中使用 UTF-8 解碼 Base64 資料
UTF-8 方法是使用 python 解碼 Base64 的更直接的方法。讓我們看看這是如何工作的。
-
我們首先需要像上面的程式一樣匯入 Base64 庫包。
-
變數
input_string
用於儲存需要解碼的值。 -
我們使用變數
decoded_value
將輸入字串轉換為其對應的二進位制陣列值。用於解釋此字串的方法是 UTF-8,它與 ASCII 非常相似。 -
字串被解釋為它的 8 位二進位制值。也可以選擇其他解釋格式。
-
為了檢視結果,我們列印變數
decoded_value
。
程式碼:
import base64
input_string = "U3Vubnk="
decoded_value = base64.b64decode(input_string).decode("utf-8")
print(decoded_value)
輸出:
Sunny
在 Python 中使用 Base64 解碼影象
最後一節將討論 Base64 解碼的實際用途,例如 Base64 影象編碼和解碼。我們將研究如何使用 Python 將影象編碼到其 Base64 程式碼中,以及如何將其解碼回來。
我們有一個名為 cheers.jpg
的影象,它將被編碼。
在 Python 中使用 Base64 對影象進行編碼
匯入 Base64 庫包。語法 with open("cheers.jpg", "rb")
是一個 Base64 函式,它將影象的位元組儲存在我們建立的名為 photo2code
的物件中。
影象的 Base64 編碼值儲存在變數 coded_str
中。語法 photo2code.read()
讀取影象的位元組值,函式 base64.b64encode(objectname.read()
將位元組值轉換為 Base64 編碼值。
最後,列印 coded_str
以檢視 Base64 輸出。
程式碼:
import base64
with open("cheers.jpg", "rb") as photo2code:
coded_str = base64.b64encode(photo2code.read())
print(coded_str)
在這裡,輸出是一個長密文。你可以執行上述程式碼以在你的機器上生成結果。
在 Python 中將 Base64 程式碼解碼為其影象形式
解碼影象檔案需要兩個主要步驟:
-
讀取 Base64 資料,以及
-
解碼資料並將其寫入影象檔案。
讀取 Base64 資料
建立一個可寫的 .bin 檔案來儲存此步驟的 Base64 值。
語法 with open('file_name, "wb") as file:
建立一個可寫的 ("wb"
) .bin
檔案,我們在其中儲存 Base64 值。file.write(coded_str)
語法只是將這些 Base64 值寫入該 .bin
檔案。
這裡,變數 coded_str
用於上述程式。上述程式可用於重新建立 coded_str
變數,但也可以使用 .txt 檔案。
它所需要的只是將具有 Base64 值的檔案放入語法中,with open('(filename.extension)', "wb") as file:
,然後該檔案將被載入到程式中。應確保該檔案與儲存 python.txt 檔案的目錄相同,否則系統不會與之互動。
解碼 Base64 值並寫入影象檔案
在這裡,我們將使用 .bin 檔案中的值進行解碼。建立變數 decoder
,通過語法 decoder = open('pic_encoding.bin', 'rb')
載入 .bin 檔案。
該檔案作為可讀實體載入,因為我們將不再在該檔案中寫入任何內容。然後使用語法 read_b64 = decoder.read()
的變數讀取解碼器的內容。
變數 final_decoder
用於建立一個新的可寫 .jpeg 檔案,我們將在其中儲存解碼後的 Base64 值。
最後,我們將內容解碼並寫入一個新的影象檔案。
讓我們回顧一下到目前為止為使一切變得清晰的步驟。
- 我們在
coded_str
變數中有 Base64 值。 - 這些值寫入 .bin 檔案
pic_encoding.bin
。 - 然後,資料從 .bin 檔案載入到變數 decode。
- 我們使用變數
read_64
來讀取儲存在解碼器變數中的編碼值。 - 最後,我們建立一個空影象檔案
pic_decoded_back.jpeg
和變數final_decoder
,它將充當將解碼資料傳輸到影象檔案中的漏斗。
當上述所有步驟啟動時,我們解碼二進位制值並使用語法將這些值寫入影象檔案,
final_decoder.write(base64.b64decode((read_b64)))
Base64 函式從變數 read_b64
中獲取值,並通過變數 final_decoder
將它們傳輸到影象檔案中。
如果執行得當,該程式將在 python.txt 檔案所在的同一目錄中生成一個新的影象檔案。
程式碼:
import base64
with open("pic_encoding.bin", "wb") as file:
file.write(coded_str)
# decoding
decoder = open("pic_encoding.bin", "rb")
read_b64 = decoder.read()
final_decoder = open("pic_decoded_back.jpeg", "wb")
final_decoder.write(base64.b64decode((read_b64)))