一、基本概念
Base64是一種用64個字符來表示任意二進制數據的方法。使用的64個字符包括大小寫字母、數字、加號+、斜杠/等,補位用等號=。
Base64編碼具有不可讀性和可逆性,常用於電子郵件、HTTP協議中的傳輸字符防止出現特殊字符和編碼問題。因為Base64編碼後的字符串只包含ASCII字符,所以能夠被所有郵件系統支持。
下面是將data字符串使用Base64編碼的例子:
import base64 data = b'hello world' encoded_data = base64.b64encode(data) print(encoded_data) # b'aGVsbG8gd29ybGQ='
二、編碼過程
Base64編碼的過程可以分為以下幾步:
- 將需要編碼的字符串轉換為二進制數據
- 將二進制數據每6位一分組,不足6位的在後面補0
- 將每組轉換為對應的Base64字符
- 對於每組不足6位的在後面補等號=,表示補完0的位數,原本的數據不含有等號
具體來說,假設需要編碼的字符串為data,將data轉換為二進制數據後分組:
import base64 data = b'hello world' binary_data = ''.join(format(x, '08b') for x in data) binary_group = [binary_data[i:i+6] for i in range(0, len(binary_data), 6)] print(binary_group) # ['011010', '010010', '011011', '110011', '011011', '000101', '011110', '011000']
然後將每個分組轉換為對應的Base64字符:
mapping = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' base64_group = [mapping[int(x, 2)] for x in binary_group] print(base64_group) # ['a', 'S', '1', 'z', '1', 'F', 'e', 'g']
補等號的過程如下:
padding = len(binary_group[-1]) % 6 if padding > 0: base64_group[-1] += '=' * (6 - padding) print(''.join(base64_group)) # 'aGVsbG8gd29ybGQ='
三、解碼過程
解碼過程和編碼過程基本相反,可以分為以下幾步:
- 將Base64字符轉換為對應的二進制數據
- 將二進制數據合併
- 將合併的二進制數據轉換為原字符串
下面是將aGVsbG8gd29ybGQ=使用Base64解碼的例子:
import base64 encoded_data = b'aGVsbG8gd29ybGQ=' decoded_data = base64.b64decode(encoded_data) print(decoded_data) # b'hello world'
四、應用場景
Base64編碼常用於以下場景中:
- 電子郵件:電子郵件中不能直接傳輸二進制文件,需要將二進制數據編碼為ASCII字符後傳輸
- HTTP協議:HTTP協議中的請求頭和響應頭不能出現特殊字符,需要將二進制數據編碼為ASCII字符後傳輸
- 數據存儲:比如將二進制數據存儲到數據庫或配置文件中
下面是將圖片使用Base64編碼後在HTML中顯示的例子:
import base64 with open('example.jpg', 'rb') as f: data = f.read() encoded_data = base64.b64encode(data).decode('ascii') html = '<img src="data:image/jpeg;base64,%s">' % encoded_data print(html)
在使用上述代碼後,可以將生成的html代碼複製到瀏覽器的地址欄中查看對應的圖片。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/206288.html