C語言實現base64編碼,base64解碼

jopen 10年前發布 | 52K 次閱讀 C/C++開發 BASE64

C語言實現base64編碼,base64解碼。

char base64_encode(char binData, char *base64, int binLength)
{
        int i = 0;
        int j = 0;
        int current = 0;
        for (i = 0; i < binLength; i += 3) {

            //獲取第一個6位
            current = (*(binData+i) >> 2) & 0x3F;
            *(base64 + j++) = base64char[current];

            //獲取第二個6位的前兩位
            current = (*(binData+i) << 4) & 0x30;

            //如果只有一個字符,那么需要做特殊處理
            if (binLength <= (i+1)) {
                    *(base64 + j++) = base64char[current];
                    *(base64 + j++) = '=';
                    *(base64 + j++) = '=';
                    break;
            }

            //獲取第二個6位的后四位
            current |= (*(binData+i+1) >> 4 ) & 0xf;
            *(base64 + j++) = base64char[current];
            //獲取第三個6位的前四位
            current = (*(binData+i+1) << 2 ) & 0x3c;
            if (binLength <= (i+2)) {
                    *(base64 + j++) = base64char[current];
                    *(base64 + j++) = '=';
                    break;
            }

            //獲取第三個6位的后兩位
            current |= (*(binData+i+2) >> 6) & 0x03;
            *(base64 + j++) = base64char[current];

            //獲取第四個6位
            current = *(binData+i+2) & 0x3F;
            *(base64 + j++) = base64char[current];
    }
    *(base64+j) = '\0';

    return base64;

}

char base64_decode(char const base64Str, char *debase64Str, int encodeStrLen) { int i = 0; int j = 0; int k = 0; char temp[4] = "";

    for (i = 0; i < encodeStrLen; i += 4) {
            for (j = 0; j < 64 ; j++) {
                    if (*(base64Str + i) == base64char[j]) {
                            temp[0] = j;
                    }
            }

            for (j = 0; j < 64 ; j++) {
                    if (*(base64Str + i + 1) == base64char[j]) {
                            temp[1] = j;
                    }
            }


            for (j = 0; j < 64 ; j++) {
                    if (*(base64Str + i + 2) == base64char[j]) {
                            temp[2] = j;
                    }
            }


            for (j = 0; j < 64 ; j++) {
                    if (*(base64Str + i + 3) == base64char[j]) {
                            temp[3] = j;
                    }
            }

            *(debase64Str + k++) = ((temp[0] << 2) & 0xFC) | ((temp[1]>>4) & 0x03);
            if ( *(base64Str + i + 2)  == '=' )
                    break;

            *(debase64Str + k++) = ((temp[1] << 4) & 0xF0) | ((temp[2]>>2) & 0x0F);
            if ( *(base64Str + i + 3) == '=' )
                    break;

            *(debase64Str + k++) = ((temp[2] << 6) & 0xF0) | (temp[3] & 0x3F);
    }
    return debase64Str;

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!