文章

base64使用指南

base64使用指南

在 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个)
    • 和 /(2个)
  • =(填充字符)

注意事项:

  1. 输入数据必须是字节类型,所以需要先 .encode()
  2. 输出是字节类型,通常需要 .decode() 转换为字符串
  3. Base64 编码会使数据体积增加约 33%
  4. Base64 不是加密,只是编码,任何人都可以解码

这就是在 Python 中使用 Base64 编码的基本方法!

本文由作者按照 CC BY 4.0 进行授权