c++實現Base64加密方式

網絡上傳輸8bit信息最常用的傳輸方式就是base64,它通過查找表的方式,將一種基於64(2^6)個可打印字符來表示二進制數據;也就是說將任何要傳遞的信息轉換爲由A-Z,a-z,0-9,+/構成的64個字符中的一部分;

如現在有ABD三個字符,那麼如何將這三個字符轉換爲base64編碼的方式呢,如下圖所示:

從圖上可以看出,編碼方式由原來的8bit轉換爲6bit,然後每一6bit前面補齊2個bit(00)構成新的8bit,最後就由原來的3字節變成了4字節;

如果字符串的字節數不是3的整數倍,則在後面多餘的用“=”來補充;如上圖的例子中假如爲ABD1,則可以先補充2個0,構成ABD100,這個時候變成了6個字節,能被3整除,在進行編碼時候,後面多餘出的可以用“=”來表示。

代碼如下:

#include<iostream>
using namespace std;

int ChangeCharToBase64(char* pBase64Result, const char* pSrc, int iLen)
{
	static char szBase64Set[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	int n = 0;
	int iMoveStep = 2;
	char temp;
	int iIndex;
	for (size_t i = 0; i < iLen; i++)
	{
		if (iMoveStep == 2)
		{
			iIndex = ((*pSrc) >> iMoveStep) & 0x3f;
		}
		else if(iMoveStep == 4)
		{
			iIndex = ((*pSrc) >> iMoveStep) & 0xf;
		}
		else if (iMoveStep == 6)
		{
			iIndex = ((*pSrc) >> iMoveStep) & 0x3;
		}
		iIndex += n;
		*pBase64Result++ = szBase64Set[iIndex];
		n = (*pSrc) << (6 - iMoveStep);
		n = n&0x3f;
		iMoveStep += 2;
		if (iMoveStep == 8)
		{
			iIndex = (*pSrc) & 0x3f;
			*pBase64Result++ = szBase64Set[iIndex];
			n = 0;
			iMoveStep = 2;
		}
		pSrc++;
	}
	if (n!=0)
	{
		*pBase64Result++ = szBase64Set[n];
	}
	if (iLen %3 == 1)
	{
		*pBase64Result++ = '=';
		*pBase64Result = '=';
	}	
	if (iLen % 3 == 2)
	{
		*pBase64Result = '=';
	}
	return 0;
}
void main()
{
	char pBaseResult[1024];
	int r = 'A';
	char* pSrc = "ABD1";
	ChangeCharToBase64(pBaseResult, pSrc, strlen(pSrc));
};

最後的base64編碼結果爲QUJEMQ==

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章