zoukankan      html  css  js  c++  java
  • 在C语言中使用libb64进行Base64编解码

    libb64下载地址http://sourceforge.net/projects/libb64

    以下为Demo

    libb64_demo.c

    #include <stdio.h>
    #include <string.h>
    #include <libb64/cencode.h>
    #include <libb64/cdecode.h>
    void base64EncodeString(const char *textToEncode, char *buffer);
    void base64DecodeString(const char *codeToDecode, char *buffer);
    void base64EncodeFile(FILE *fileToEncode, FILE *encodedFile);
    void base64DecodeFile(FILE *encodedFile, FILE *decodedFile);
    int main()
    {
        const char *text = "Matt Damon";
        char buffer[1000];
        base64EncodeString(text, buffer);
        printf("%s", buffer);
        const char *code = "R29vZCBXaWxsIEh1bnRpbmc=";
        base64DecodeString(code, buffer);
        printf("%s
    ", buffer);
        const char *inputFilename = "易语言5.2修正版.rar";
        FILE *inputFile = fopen(inputFilename, "rb");
        if (inputFile)
        {
            const char *encodedFilename = "易语言5.2修正版.rar.txt";
            FILE *encodedFile = fopen(encodedFilename, "wb");
            if (encodedFile)
            {
                base64EncodeFile(inputFile, encodedFile);
                fclose(encodedFile);
            }
            else
                printf("Cannot open file: %s
    ", encodedFile);
            fclose(inputFile);
        }
        else
            printf("Cannot open file: %s
    ", inputFilename);
        const char *encodedFilename = "360DrvMgrInstaller_net.exe.txt";
        FILE *encodedFile = fopen(encodedFilename, "rb");
        if (encodedFile)
        {
            const char *decodedFilename = "360DrvMgrInstaller_net";
            FILE *decodedFile = fopen(decodedFilename, "wb");
            if (decodedFile)
            {
                base64DecodeFile(encodedFile, decodedFile);
                fclose(decodedFile);
            }
            else
                printf("Cannot open file: %s
    ", decodedFile);
            fclose(encodedFile);
        }
        else
            printf("Cannot open file: %s
    ", encodedFilename);
        system("pause");
        return 0;
    }
    void base64EncodeString(const char *textToEncode, char *buffer)
    {
        base64_encodestate state;
        base64_init_encodestate(&state);
        int numberOfBytesEncoded = base64_encode_block(textToEncode, strlen(textToEncode), buffer, &state);
        numberOfBytesEncoded += base64_encode_blockend(buffer + numberOfBytesEncoded, &state);
        buffer[numberOfBytesEncoded] = '';
    }
    void base64DecodeString(const char *codeToDecode, char *buffer)
    {
        base64_decodestate state;
        base64_init_decodestate(&state);
        int numberOfCharactersDecoded = base64_decode_block(codeToDecode, strlen(codeToDecode), buffer, &state);
        buffer[numberOfCharactersDecoded] = '';
    }
    void base64EncodeFile(FILE *fileToEncode, FILE *encodedFile)
    {
        char readBuffer[1024];
        char encodedBuffer[2048];
        int numberOfBytesEncoded;
        base64_encodestate state;
        base64_init_encodestate(&state);
        while (!feof(fileToEncode))
        {
            size_t numberOfObjects = fread(readBuffer, sizeof(char), 1024, fileToEncode);
            numberOfBytesEncoded = base64_encode_block(readBuffer, numberOfObjects, encodedBuffer, &state);
            fwrite(encodedBuffer, sizeof(char), numberOfBytesEncoded, encodedFile);
        }
        numberOfBytesEncoded = base64_encode_blockend(encodedBuffer, &state);
        fwrite(encodedBuffer, sizeof(char), numberOfBytesEncoded, encodedFile);
    }
    void base64DecodeFile(FILE *encodedFile, FILE *decodedFile)
    {
        char inputBuffer[1024];
        char decodedBuffer[2048];
        int numberOfBytesDecoded;
        base64_decodestate state;
        base64_init_decodestate(&state);
        while (!feof(encodedFile))
        {
            size_t numberOfCharacters = fread(inputBuffer, sizeof(char), 1024, encodedFile);
            numberOfBytesDecoded = base64_decode_block(inputBuffer, numberOfCharacters, decodedBuffer, &state);
            fwrite(decodedBuffer, sizeof(char), numberOfBytesDecoded, decodedFile);
        }
    }
  • 相关阅读:
    按钮一色三变化
    最小的k个数-Python版
    字符串的全排列-终于弄明白了
    键值offer-求逆序对
    Python小技巧
    面试题48-动态规划-最长不含重复字符的子字符串,剪绳子
    面试题47-礼物的最大价值(Python版)
    多元高斯分布
    torch_13_ProGan笔记
    pytorch-模型保存与加载自己训练的模型详解 
  • 原文地址:https://www.cnblogs.com/buyishi/p/9165216.html
Copyright © 2011-2022 走看看