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);
        }
    }
  • 相关阅读:
    【转+补充】在OpenCV for Android 2.4.5中使用SURF(nonfree module)
    Delphi StarOffice Framework Beta 1.0 发布
    Angular ngIf相关问题
    angularjs文档下载
    公众号微信支付开发
    公众号第三方平台开发 教程六 代公众号使用JS SDK说明
    公众号第三方平台开发 教程五 代公众号处理消息和事件
    公众号第三方平台开发 教程四 代公众号发起网页授权说明
    公众号第三方平台开发 教程三 微信公众号授权第三方平台
    公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
  • 原文地址:https://www.cnblogs.com/buyishi/p/9165216.html
Copyright © 2011-2022 走看看