MIME之Base64編解碼
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
Base64是MIME郵件中常用的編碼方式之一。它的主要思想是將輸入的字符串或數據編碼成只含有{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}這64個可打印字符的串,故稱為“Base64”。
Base64編碼的方法是,將輸入數據流每次取6 bit,用此6 bit的值(0-63)作為索引去查表,輸出相應字符。這樣,每3個字節將編碼為4個字符(3×8 → 4×6);不滿4個字符的以'='填充。 const char EnBase64Tab[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int EncodeBase64(const unsigned char* pSrc, char* pDst, int nSrcLen, int nMaxLineLen) { unsigned char c1, c2, c3; // 輸入緩沖區讀出3個字節 int nDstLen = 0; // 輸出的字符計數 int nLineLen = 0; // 輸出的行長度計數 int nDiv = nSrcLen / 3; // 輸入數據長度除以3得到的倍數 int nMod = nSrcLen % 3; // 輸入數據長度除以3得到的余數 // 每次取3個字節,編碼成4個字符 for (int i = 0; i < nDiv; i ++) { // 取3個字節 c1 = *pSrc++; c2 = *pSrc++; c3 = *pSrc++; // 編碼成4個字符 *pDst++ = EnBase64Tab[c1 >> 2]; *pDst++ = EnBase64Tab[((c1 << 4) | (c2 >> 4)) & 0x3f]; *pDst++ = EnBase64Tab[((c2 << 2) | (c3 >> 6)) & 0x3f]; *pDst++ = EnBase64Tab[c3 & 0x3f]; nLineLen += 4; nDstLen += 4; // 輸出換行? if (nLineLen > nMaxLineLen - 4) { *pDst++ = ' '; *pDst++ = ' '; nLineLen = 0; nDstLen += 2; } } // 編碼余下的字節 if (nMod == 1) { c1 = *pSrc++; *pDst++ = EnBase64Tab[(c1 & 0xfc) >> 2]; *pDst++ = EnBase64Tab[((c1 & 0x03) << 4)]; *pDst++ = '='; *pDst++ = '='; nLineLen += 4; nDstLen += 4; } else if (nMod == 2) { c1 = *pSrc++; c2 = *pSrc++; *pDst++ = EnBase64Tab[(c1 & 0xfc) >> 2]; *pDst++ = EnBase64Tab[((c1 & 0x03) << 4) | ((c2 & 0xf0) >> 4)]; *pDst++ = EnBase64Tab[((c2 & 0x0f) << 2)]; *pDst++ = '='; nDstLen += 4; } // 輸出加個結束符 *pDst = ' 該文章在 2014/1/17 10:34:02 編輯過 |
關鍵字查詢
相關文章
正在查詢... |