Python简单实现Base64编码和解码的方法

下面是“Python简单实现Base64编码和解码的方法”的完整攻略:

1. Base64编码概述

Base64是一种将数据编码的方法,可将任意二进制数据转换为纯文本格式便于传输。

Base64编码由64个字符组成,即:A-Z、a-z、0-9和“+”、“/”两个符号。

2. Python内置库 base64

在Python中,可以很方便地使用内置库base64进行Base64编码与解码。

2.1 Base64编码

使用base64库的b64encode()函数进行Base64编码,示例代码如下:

import base64

text = 'Hello World!'
encoded_text = base64.b64encode(text.encode('utf-8'))
print(encoded_text)

输出结果为:b'SGVsbG8gV29ybGQh'

2.2 Base64解码

使用base64库的b64decode()函数进行Base64解码,示例代码如下:

import base64

encoded_text = 'SGVsbG8gV29ybGQh'
decoded_text = base64.b64decode(encoded_text).decode('utf-8')
print(decoded_text)

输出结果为:Hello World!

3. 自定义实现 Base64 编码和解码

虽然Python中已经有了base64库提供的编码和解码方法,但我们也可以自己实现,以提高对Base64的理解。

3.1 Base64编码

Base64编码的实现是将字符转成对应的ASCII码值,再将二进制序列的每6位组成一个整数,根据这个整数在Base64编码字符表中查找对应的字符,重复直到所有数据均转换成Base64字符为止。

以下是Python实现的代码示例:

import string

BASE64_CHARS = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+' + '/'

def base64_encode(text: str) -> str:
    # 将字符串转换成二进制格式
    text_bytes = text.encode('utf-8')
    bin_text = ''.join([f'{byte:08b}' for byte in text_bytes])

    # 补全 Base64 编码中所需要的 0
    remainder = len(bin_text) % 6
    if remainder:
        bin_text += '0' * (6 - remainder)

    # 按照 6 位分组,并将每组转换为 10 进制整数,最后转换为 Base64 编码字符
    groups = [bin_text[i: i+6] for i in range(0, len(bin_text), 6)]
    decimal_groups = [int(group, 2) for group in groups if group != '']
    encoded_text = ''.join([BASE64_CHARS[i] for i in decimal_groups])

    # 补全末尾的等号
    remainder = len(encoded_text) % 4
    if remainder:
        encoded_text += '=' * (4 - remainder)

    return encoded_text

3.2 Base64解码

Base64解码的实现是将字符在Base64编码字符表中的位置转换成10进制整数,并将这个整数转换成二进制字符串,然后将每个6位分成一组,并将每组转换成对应的字符。

以下是Python实现的代码示例:

def base64_decode(text: str) -> str:
    # 去掉 Base64 编码中末尾的等号
    text = text.rstrip('=')

    # 将 Base64 编码字符转换成对应的10进制整数
    decimal_groups = [BASE64_CHARS.index(c) for c in text]

    # 将10进制整数转换成二进制字符串,并将各位拼接起来
    bin_text = ''.join([f'{decimal:06b}' for decimal in decimal_groups])

    # 按照 8 位分组,并将每组转换成字符
    groups = [bin_text[i: i+8] for i in range(0, len(bin_text), 8)]
    decoded_text = ''.join([chr(int(group, 2)) for group in groups])

    return decoded_text

4. 示例验证

可以使用自定义实现的Base64编码和解码对文本进行编解码,验证规则是否正确。

以下是Python实现的代码示例:

text = 'Hello World!'
encoded_text = base64_encode(text)
decoded_text = base64_decode(encoded_text)
print(f'原文: {text}')
print(f'Base64 编码后: {encoded_text}')
print(f'Base64 解码后: {decoded_text}')

输出结果为:

原文: Hello World!
Base64 编码后: SGVsbG8gV29ybGQh
Base64 解码后: Hello World!

另一个示例:

text = 'Python is fun!'
encoded_text = base64_encode(text)
decoded_text = base64_decode(encoded_text)
print(f'原文: {text}')
print(f'Base64 编码后: {encoded_text}')
print(f'Base64 解码后: {decoded_text}')

输出结果为:

原文: Python is fun!
Base64 编码后: UHl0aG9uIGlzIGZ1biE=
Base64 解码后: Python is fun!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python简单实现Base64编码和解码的方法 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • Python标准库之zipfile和tarfile模块的使用

    Python标准库之zipfile和tarfile模块的使用攻略 简介 压缩文件在网页和文件传输中是很常见的,很多时候我们需要用到Python对压缩文件的操作。Python标准库中提供了两个模块zipfile和tarfile,可以用来读取、写入、解压缩、压缩zip、tar和其他常见的压缩格式文件。 本篇攻略将介绍zipfile和tarfile模块的使用方法,…

    python 2023年6月3日
    00
  • 使用 Python 的 pprint库格式化和输出列表和字典的方法

    使用 Python 的 pprint 库可以帮助我们更好地格式化和输出复杂数据结构,如列表和字典。下面是 pprint 库的详细攻略,包括安装该库、掌握列表和字典的格式化方法、示例说明等。 安装 pprint 库 首先,我们需要安装 pprint 库。可以通过 pip 命令来进行安装: pip install pprint 格式化和输出列表 要使用 ppri…

    python 2023年6月5日
    00
  • 如何使用Python在MySQL中使用外键?

    在MySQL中,可以使用外键来建立表之间的关系。在Python中,可以使用MySQL连接来执行外键查询。以下是在Python中使用外键的完整攻略,包括外键的基本语法、使用外键的示例及如何在Python中使用外键。 外键的基本语法 在MySQL中,可以使用FOREIGN KEY关键字来创建外键以下是创建外键的基本语法: CREATE TABLE table_n…

    python 2023年5月12日
    00
  • Python中字典与恒等运算符的用法分析

    Python中字典与恒等运算符的用法分析 什么是字典 字典是Python中内置的一种数据类型,也称为“关联数组”或“映射”。字典是由一系列键(key)和对应值(value)组成的无序集合,键和值之间通过“冒号”进行配对,并用“花括号”括起来。 字典的特点: 字典中的键必须唯一且不可变(可以是字符串、数字、元组等,但不能是列表) 键值对可以按任意顺序排列 可以…

    python 2023年5月13日
    00
  • 详解使用Python下载文件的几种方法

    Python可以使用多种方法来下载文件,本文将详细讲解使用Python下载文件的几种方法,包括使用requests库和urllib库两个示例。 使用requests库下载文件的示例 以下是一个示例,演示如何使用requests库下载文件: import requests url = ‘https://www.example.com/example.pdf’ …

    python 2023年5月15日
    00
  • python与json数据的交互详情

    下面是关于Python与JSON数据的交互的完整攻略。 什么是 JSON? JSON是一种轻量级的数据交换格式。它以易于阅读和编写的方式表示结构化数据。通常用于通过网络连接或与不同编程语言之间的应用程序交换数据。 JSON格式使用JavaScript对象标记表示数据。与XML不同,JSON仅针对值进行格式化,而不是标记。 JSON的一个主要优点是它与Java…

    python 2023年5月20日
    00
  • Python读写JSON文件的操作详解

    Python读写JSON文件是一个非常常见的操作,可以帮助我们在Python中处理JSON格式的数据。本攻略将介绍Python读写JSON文件的完整攻略,包括数据读取、数据写入、数据处理和示例。 步骤1:数据读取 在Python中,我们可以使用json库读取JSON格式的数据。以下是读取JSON文件的示例代码: import json with open(‘…

    python 2023年5月15日
    00
  • CentOS 7 下LAMP实现及基于https的虚拟化主机

    下面我来详细讲解“CentOS 7 下LAMP实现及基于https的虚拟化主机”的完整攻略。 一、CentOS 7 下LAMP实现 1. 安装Apache 执行以下命令安装Apache: sudo yum install httpd 启动Apache服务: sudo systemctl start httpd.service 设置Apache服务开机启动: …

    python 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部