0,0 → 1,59 |
/* Author: PaulCodeman |
Example: |
char bufferb64[0x1000] = {0}; |
base64_encode("Kevin van Zonneveld",#bufferb64, 19); |
#bufferb64 == "S2V2aW4gdmFuIFpvbm5ldmVsZA==" |
*/ |
|
:dword b64_symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; |
inline void base64_encode(dword data, buffer, length) |
{ |
byte o1 = 0; |
byte o2 = 0; |
byte o3 = 0; |
dword bits = 0; |
dword h1 = 0; |
dword h2 = 0; |
dword h3 = 0; |
dword h4 = 0; |
|
dword end = 0; |
end = data+length; |
|
do |
{ |
o1 = DSBYTE[data];data++; |
if (data < end) {o2 = DSBYTE[data];data++;} else o2 = 0; |
if (data < end) {o3 = DSBYTE[data];data++;} else o3 = 0; |
|
bits = o1<<16; |
bits |= o2<<8; |
bits |= o3; |
|
h1 = bits>>18 & 0x3f; |
h2 = bits>>12 & 0x3f; |
h3 = bits>>6 & 0x3f; |
h4 = bits & 0x3f; |
|
DSBYTE[buffer] = DSBYTE[#b64_symbols+h1];buffer++; |
DSBYTE[buffer] = DSBYTE[#b64_symbols+h2];buffer++; |
DSBYTE[buffer] = DSBYTE[#b64_symbols+h3];buffer++; |
DSBYTE[buffer] = DSBYTE[#b64_symbols+h4];buffer++; |
} while(end > data); |
switch(length % 3) |
{ |
case 1: |
buffer--; |
DSBYTE[buffer] = '='; |
buffer--; |
DSBYTE[buffer] = '='; |
buffer+=2; |
break; |
case 2: |
buffer--; |
DSBYTE[buffer] = '='; |
buffer++; |
break; |
} |
DSBYTE[buffer] = 0; |
} |