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