在 Python 中使用 Base64 编码非常简单,主要有以下几种方法:
1. 基本 Base64 编码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| import base64
# 原始字符串
text = "admin:admin"
# 转换为字节
data_bytes = text.encode('utf-8')
# Base64 编码
encoded = base64.b64encode(data_bytes)
# 解码为字符串
encoded_str = encoded.decode('utf-8')
print(encoded_str) # 输出:YWRtaW46YWRtaW4=
|
2. 单行简写版本
1
2
3
4
5
| import base64
# 一步完成
encoded_str = base64.b64encode("admin:admin".encode()).decode()
print(encoded_str) # YWRtaW46YWRtaW4=
|
3. 完整编码解码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| import base64
# 编码函数
def encode_base64(text):
return base64.b64encode(text.encode()).decode()
# 解码函数
def decode_base64(encoded_text):
return base64.b64decode(encoded_text).decode()
# 测试
original = "admin:admin"
encoded = encode_base64(original)
decoded = decode_base64(encoded)
print(f"原始文本: {original}")
print(f"Base64编码: {encoded}")
print(f"解码后: {decoded}")
|
4. 处理特殊情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| import base64
# 1. URL安全的Base64编码(用于URL参数)
text = "data with + and /"
url_safe = base64.urlsafe_b64encode(text.encode()).decode()
print(url_safe) # 将+和/替换为-和_
# 2. 不添加填充字符=
no_padding = base64.b64encode(text.encode()).decode().rstrip('=')
print(no_padding)
# 3. 处理二进制数据
binary_data = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR'
encoded_binary = base64.b64encode(binary_data).decode()
print(encoded_binary[:20] + "...")
|
5. 实际应用示例 - Basic Auth
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| import base64
def create_basic_auth_header(username, password):
"""创建HTTP Basic认证头"""
credentials = f"{username}:{password}"
encoded = base64.b64encode(credentials.encode()).decode()
return f"Basic {encoded}"
# 示例
auth_header = create_basic_auth_header("admin", "admin")
print(auth_header) # Basic YWRtaW46YWRtaW4=
# 解析Basic Auth
def parse_basic_auth(header):
"""解析Basic认证头"""
if header.startswith("Basic "):
encoded = header[6:] # 去掉"Basic "
decoded = base64.b64decode(encoded).decode()
username, password = decoded.split(":", 1)
return username, password
return None, None
# 测试解析
username, password = parse_basic_auth(auth_header)
print(f"用户名: {username}, 密码: {password}")
|
6. 高级用法 - 处理文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| import base64
# 将文件编码为Base64
def encode_file_to_base64(file_path):
with open(file_path, 'rb') as file:
file_data = file.read()
return base64.b64encode(file_data).decode()
# 将Base64解码为文件
def decode_base64_to_file(encoded_str, output_path):
file_data = base64.b64decode(encoded_str)
with open(output_path, 'wb') as file:
file.write(file_data)
# 示例:编码图片
encoded_image = encode_file_to_base64("image.png")
print(f"Base64图片数据长度: {len(encoded_image)}")
|
7. Base64编码表
Base64 编码使用 64 个字符:
- A-Z(26个)
- a-z(26个)
- 0-9(10个)
-
- =(填充字符)
注意事项:
- 输入数据必须是字节类型,所以需要先
.encode()
- 输出是字节类型,通常需要
.decode() 转换为字符串
- Base64 编码会使数据体积增加约 33%
- Base64 不是加密,只是编码,任何人都可以解码
这就是在 Python 中使用 Base64 编码的基本方法!