Код: #include <windows.h> static char charBase64[] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' }; static int indexBase64[] = { -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1 }; ULONG Base64Encode (LPSTR lpszInputString, LPSTR lpOutputBuffer, SIZE_T nMaxLength) { char chr[3], enc[4]; int outpos = 0; for( int i=0; i<lstrlenA(lpszInputString); i+=3 ) { if( outpos+4 >= nMaxLength ) break; chr[0] = lpszInputString; chr[1] = lpszInputString[i+1]; chr[2] = lpszInputString[i+2]; enc[0] = chr[0] >> 2; enc[1] = ((chr[0] & 0x03) << 4) | (chr[1] >> 4); enc[2] = ((chr[1] & 0x0F) << 2) | (chr[2] >> 6); enc[3] = chr[2] & 0x3F; lpOutputBuffer[outpos++] = charBase64[enc[0]]; lpOutputBuffer[outpos++] = charBase64[enc[1]]; if( i+1 >= lstrlenA(lpszInputString) ) { lpOutputBuffer[outpos++] = '='; lpOutputBuffer[outpos++] = '='; } else if( i+2 >= lstrlenA(lpszInputString) ) { lpOutputBuffer[outpos++] = charBase64[enc[2]]; lpOutputBuffer[outpos++] = '='; } else { lpOutputBuffer[outpos++] = charBase64[enc[2]]; lpOutputBuffer[outpos++] = charBase64[enc[3]]; } } lpOutputBuffer[outpos] = 0; return outpos; } ULONG Base64Decode (LPTSTR lpszInputString, LPTSTR lpOutputBuffer, SIZE_T nMaxLength) { char chr[3], enc[4]; int outpos = 0; for( int i=0; i<lstrlen(lpszInputString); i+=4 ) { if( outpos+3 >= nMaxLength ) break; enc[0] = indexBase64[lpszInputString]; enc[1] = indexBase64[lpszInputString[i+1]]; enc[2] = indexBase64[lpszInputString[i+2]]; enc[3] = indexBase64[lpszInputString[i+3]]; if( enc[0] == -1 || enc[1] == -1 ) break; chr[0] = (enc[0] << 2) | (enc[1] >> 4); chr[1] = ((enc[1] & 15) << 4) | (enc[2] >> 2); chr[2] = ((enc[2] & 3) << 6) | enc[3]; lpOutputBuffer[outpos++] = chr[0]; if( enc[2] != -1 ) { lpOutputBuffer[outpos++] = chr[1]; } if( enc[3] != -1 ) { lpOutputBuffer[outpos++] = chr[2]; } } lpOutputBuffer[outpos] = 0; return outpos; } использование Код: void _WinMainCRTStartup() { char buffEncode[50]; char buffDecode[50]; Base64Encode("password",buffEncode,sizeof(buffEncode)); MessageBox(0,buffEncode,0,0); Base64Decode(buffEncode,buffDecode,sizeof(buffDecode)); MessageBox(0,buffDecode,0,0); ExitProcess(0); }