如何在Linux中使用Base64进行编码和解码?

Base64是一种常见的编码方法,用于将二进制数据转换为ASCII字符,以便在文本协议中传输,在Linux系统中,我们可以使用各种工具和命令来进行Base64编码解码操作,以下是详细的介绍:

如何在Linux中使用Base64进行编码和解码?插图1

1、Base64 编码与解码

编码原理:Base64编码将每3个字节的数据编码为4个ASCII字符,编码后的字符串长度会增加,但可以无损地还原回原始的二进制数据。

应用场景:主要用于电子邮件、HTTP协议、数据传输等场景,通过电子邮件发送图片或其他二进制文件时,往往会先将其使用Base64编码为文本格式,然后发送。

2、Linux中的Base64命令

编码命令base64 [选项] [文件名]

-w:指定输出行的最大宽度,默认为76。

-i:从标准输入读取数据。

示例echo "Hello, Linux!" | base64,结果为SGVsbG8sIExpbnV4IQ==

解码命令base64 -d [选项] [文件名]

-d:表示解码操作。

示例echo "SGVsbG8sIExpbnV4IQ==" | base64 -d,结果为Hello, Linux!

编码文件base64 -w [宽度] -i [输入文件名] -o [输出文件名]

示例base64 -i input.txt -o output.txt,将input.txt文件进行编码,并将结果保存到output.txt文件。

3、C语言中的Base64编码与解码

使用openssl库

编码函数int EVP_EncodeBlock(unsigned char *out, const unsigned char *in, int inlen)

如何在Linux中使用Base64进行编码和解码?插图3

示例代码

         #include <openssl/evp.h>
         #include <stdio.h>
         #include <string.h>
         int main() {
             const char *input = "Hello, Linux!";
             unsigned char buffer[100];
             unsigned char result[100];
             // 编码
             int length = strlen(input);
             EVP_EncodeBlock(buffer, (const unsigned char *) input, length);
             printf("Base64 编码结果:%s
", buffer);
             // 解码
             int decodedLength = strlen(buffer);
             EVP_DecodeBlock(result, buffer, decodedLength);
             printf("Base64 解码结果:%s
", result);
             return 0;
         }
         ```。手动实现编码表

static const char base64_alphabet[] = {

'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',

'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',

'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};

编码函数

char *encode(const char *buf, const long size, char *base64Char) {

int a = 0;

int i = 0;

while (i < size) {

char b0 = buf[i++];

char b1 = (i < size) ? buf[i++] : 0;

char b2 = (i < size) ? buf[i++] : 0;

int int63 = 0x3F; // 00111111

int int255 = 0xFF; // 11111111

base64Char[a++] = base64_alphabet[(b0 >> 2) & int63];

base64Char[a++] = base64_alphabet[((b0 << 4) | ((b1 & int255) >> 4)) & int63];

如何在Linux中使用Base64进行编码和解码?插图5

base64Char[a++] = base64_alphabet[((b1 << 2) | ((b2 & int255) >> 6)) & int63];

base64Char[a++] = base64_alphabet[b2 & int63];

}

switch (size % 3) {

case 1:

base64Char[--a] = '=';

case 2:

base64Char[--a] = '=';

}

return base64Char;

}

```。

解码函数

       char *decode(const char *base64Char, const long base64CharSize, char *originChar, long originCharSize) {
           int toInt[128] = {-1};
           for (int i = 0; i < 64; i++) {
               toInt[base64_alphabet[i]] = i;
           }
           int int255 = 0xFF;
           int index = 0;
           for (int i = 0; i < base64CharSize; i += 4) {
               int c0 = toInt[base64Char[i]];
               int c1 = toInt[base64Char[i + 1]];
               originChar[index++] = (((c0 << 2) | (c1 >> 4)) & int255);
               if (index >= originCharSize) {
                   return originChar;
               }
               int c2 = toInt[base64Char[i + 2]];
               originChar[index++] = (((c1 << 4) | (c2 >> 2)) & int255);
               if (index >= originCharSize) {
                   return originChar;
               }
               int c3 = toInt[base64Char[i + 3]];
               originChar[index++] = (((c2 << 6) | c3) & int255);
           }
           return originChar;
       }
       ```。
Base64编码在Linux系统中可以通过命令行工具和编程库来实现,广泛应用于数据传输和存储。

各位小伙伴们,我刚刚为大家分享了有关base64 linux c的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/88588.html

小末小末
上一篇 2024年11月2日 02:24
下一篇 2024年11月2日 02:59

相关推荐