在 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)))