Base64 encryption and decryption of files in MFC

Base64 encryption and decryption of files in MFC

/**

  • Get file size
  • @param path 文件路径
    */
    unsigned long myTools::get_file_size(const char *path)
    {
    unsigned long filesize = 0;
    FILE *fp;
    fp = fopen(path, “r+”);
    if(fp == NULL)
    return filesize;
    fseek(fp, 0L, SEEK_END);
    filesize = ftell(fp);
    fclose(fp);
    return filesize;
    }

/**

  • Delete a single character
  • @param str Enter the characters to be deleted in string c
    */
    void myTools::delchar( char *str, char c ) / /Delete specified characters
    { int count = 0; int i,j; for(i=j=0;str[i]! ='\0';i++) { if(str[i]!=c)//Determine whether there are characters that are the same as the characters to be deleted { str[j++]=str[i]; } if(str[i] ==’ ‘){ printf(“delete space!\n”); } if(str[i] == '\n '){ printf(“delete n !\n”); } } str [j]='\0';//End of string }
















/**

  • Base64 encryption of files

  • @param filename 文件名 out_data 输出字符串
    */
    int myTools::file_base64(const char *filename, char *out_data)
    {
    unsigned long fileSize = get_file_size(filename);
    if (fileSize <= 0)
    return 0;

    fprintf(stderr,“the data size=%d\n”,fileSize);

    FILE* fp = fopen(filename, “rb”);
    char* inBuffer = new char[fileSize];
    ULONG uReaded = fread(inBuffer, 1, fileSize, fp);

    const BYTE* pbBinary = (const BYTE*)inBuffer;
    DWORD dwLen;
    CryptBinaryToStringA(pbBinary, fileSize, CRYPT_STRING_BASE64, NULL, & dwLen); //Convert binary sequence into string

    char* pCrypt1 = new char[dwLen];
    CryptBinaryToStringA(pbBinary, fileSize, CRYPT_STRING_BASE64, pCrypt1, &dwLen);//Convert binary sequence into string
    fclose(fp);

    delchar(pCrypt1, ‘\n’);
    delchar(pCrypt1, ‘\r’);
    strcpy(out_data, pCrypt1);
    if (inBuffer)
    {
    delete[] inBuffer;
    inBuffer = NULL;
    }
    if (pCrypt1)
    {
    delete[] pCrypt1;
    pCrypt1 = NULL;
    }
    return 0;
    }

/**

  • Decode base64 data stream and write to file

  • @param data 输入数据流 len 输入数据长度 url写入文件名
    */
    int myTools::base64_file(char *data,int len,char *url)
    {
    if(data==NULL)
    {
    return -1;
    }
    DWORD cbBinary;
    DWORD dwSkip;
    DWORD dwFlags;
    CryptStringToBinaryA(data, len+1, CRYPT_STRING_BASE64, NULL, &cbBinary, &dwSkip, &dwFlags);

    BYTE* outBuffer = new BYTE[cbBinary];
    CryptStringToBinaryA(data, len+1, CRYPT_STRING_BASE64, outBuffer, &cbBinary, &dwSkip, &dwFlags);

    FILE* fp = fopen(url, “wb”);
    ULONG uWrite = fwrite(outBuffer, 1, cbBinary, fp);

    fclose(fp);
    if (outBuffer)
    {
    delete[] outBuffer;
    outBuffer = NULL;
    }
    return 0;
    }

Guess you like

Origin blog.csdn.net/c13055215176/article/details/127101180