C语言中Base64编码和解码的初学者指南

使用OpenSSL和libb64在C编程中开始使用Base64编码和解码。我们的指南非常适合Web开发初学者。
On this page

C语言中Base64编码和解码的初学者指南

摘要

使用 OpenSSL 和 libb64 在 C 编程中开始使用 Base64 编码和解码。我们的指南非常适合 Web 开发初学者。

简介

C 编程中,有几个库可用于执行 Base64 编码和解码,例如OpenSSL和 libb64。 在本指南中,我们将探讨如何在 C 编程中使用 OpenSSL 和 libb64 进行 Base64 编码和解码。

使用 OpenSSL 进行 Base64 编码和解码

下载并提取 OpenSSL 库文件

要开始使用 OpenSSL,您需要从官方网站下载库文件。最新版本的 OpenSSL 可以在https://www.openssl.org/source/找到。下载文件后,使用您喜欢的归档工具提取它。

在程序中包含 OpenSSL 头文件

提取 OpenSSL 库文件后,您需要在程序中包含必要的头文件。头文件提供了访问库定义的函数和数据结构的方法。

要包含所需的头文件,请在 C 程序顶部添加以下行:

1#include <openssl/evp.h>

使用 EVP_EncodeBlock 函数进行编码

您可以使用EVP_EncodeBlock函数将字符串编码为 Base64 格式。此函数接受三个参数:一个输出缓冲区以存储编码数据,一个包含要编码的输入数据的源缓冲区以及输入数据的长度。

以下代码片段演示了如何使用 EVP_EncodeBlock 函数:

 1#include <openssl/evp.h>
 2
 3int main()
 4{
 5	unsigned char	input[] = "Hello World!";
 6	unsigned char	output[256];
 7	int		len;
 8	len		= EVP_EncodeBlock( output, input, strlen( input ) );
 9	output[len]	= '\0';
10	printf( "Encoded string: %s\n", output );
11	return(0);
12}

使用 EVP_DecodeBlock 函数进行解码

要使用 OpenSSL 解码 Base64 编码的字符串,可以使用EVP_DecodeBlock函数。此函数接受三个参数:一个输出缓冲区以存储解码数据,一个包含要解码的编码数据的源缓冲区以及编码数据的长度。

以下是演示如何使用 EVP_DecodeBlock 函数的示例代码片段:

 1#include <openssl/evp.h>
 2
 3int main()
 4{
 5unsigned char input[] = "SGVsbG8gV29ybGQh";
 6unsigned char output[256];
 7int len;
 8
 9len = EVP_DecodeBlock(output, input, strlen(input));
10output[len] = '\0';
11
12printf("Decoded string: %s\n", output);
13
14return 0;
15}

使用 libb64 进行 Base64 编码和解码

如果你正在寻找一款轻量级且简单的 C 语言库来执行 Base64 编码和解码,libb64 是一个非常好的选择。它提供了专门设计用于此目的的功能。

下载并解压 libb64 库文件

使用 libb64 的第一步是从官方网站下载库文件。

在程序中包含 b64 头文件

要在程序中包含 b64.h 头文件,只需在源代码开头添加以下代码行:

1#include "b64.h"

使用 b64_encode 函数进行编码

你可以使用 b64_encode 函数将字符串以 Base64 格式进行编码。该函数接受三个参数:指向输入数据的指针、输入数据的长度(以字节为单位)和指向存储编码数据的输出缓冲区的指针。

以下是一个演示如何使用 b64_encode 函数的代码片段:

 1char* input_string = "Hello World!";
 2int input_length = strlen(input_string);
 3// 为输出缓冲区分配内存
 4int output_length = (4 * ((input_length + 2) / 3)) + 1;
 5char* output_buffer = (char*)malloc(output_length);
 6// 编码输入字符串
 7b64_encode((const unsigned char*)input_string, input_length,
 8(unsigned char*)output_buffer);
 9// 打印编码后的字符串
10printf("Encoded string: %s\n", output_buffer);
11// 释放内存
12free(output_buffer);

提供的免费 Base64 编码验证工具如下:

使用 b64_decode 函数进行解码

要使用 libb46 解码 Base64 编码的字符串,你可以使用 b46_decode() 函数。该函数接受三个参数:指向编码数据的指针、数据长度(以字节为单位)和指向存储解码数据的输出缓冲区的指针。

以下是一个演示如何使用此函数的代码片段:

 1char* encoded_string = "SGVsbG8gV29ybGQh";
 2int encoded_length = strlen(encoded_string);
 3// 分配内存以存储解码后的数据
 4int decoded_length = (encoded_length / 4) * 3;
 5char* decoded_buffer = (char*)malloc(decoded_length);
 6// 解码编码字符串
 7b46_decode((const unsigned char*)encoded_string,
 8encoded_length,
 9(unsigned char*)decoded_buffer);
10// 打印解码后的字符串
11printf("Decoded string: %s\n", decoded_buffer);
12// 释放内存
13free(decoded_buffer);

提供的免费 Base64 解码验证工具如下:

如何选择 OpenSSL 和 libb64?

OpenSSL 是一个可靠的加密库,具有内置的 Base64 编码和解码功能。其广泛的文档和社区支持使它成为那些需要额外加密功能的人的选择。另一方面,libb64 是一个轻量级库,提供简单的 Base64 编码和解码功能,无需额外的加密功能。对于那些喜欢更小的库或其系统资源有限的人来说,这是一个很好的选择。