Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7944 | pavelyakov | 1 | /* Author: PaulCodeman |
2 | Example: |
||
3 | char bufferb64[0x1000] = {0}; |
||
4 | base64_encode("Kevin van Zonneveld",#bufferb64, 19); |
||
5 | #bufferb64 == "S2V2aW4gdmFuIFpvbm5ldmVsZA==" |
||
6 | */ |
||
7 | |||
8 | :dword b64_symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; |
||
9 | inline void base64_encode(dword data, buffer, length) |
||
10 | { |
||
11 | byte o1 = 0; |
||
12 | byte o2 = 0; |
||
13 | byte o3 = 0; |
||
14 | dword bits = 0; |
||
15 | dword h1 = 0; |
||
16 | dword h2 = 0; |
||
17 | dword h3 = 0; |
||
18 | dword h4 = 0; |
||
19 | |||
20 | dword end = 0; |
||
21 | end = data+length; |
||
22 | |||
23 | do |
||
24 | { |
||
25 | o1 = DSBYTE[data];data++; |
||
26 | if (data < end) {o2 = DSBYTE[data];data++;} else o2 = 0; |
||
27 | if (data < end) {o3 = DSBYTE[data];data++;} else o3 = 0; |
||
28 | |||
29 | bits = o1<<16; |
||
30 | bits |= o2<<8; |
||
31 | bits |= o3; |
||
32 | |||
33 | h1 = bits>>18 & 0x3f; |
||
34 | h2 = bits>>12 & 0x3f; |
||
35 | h3 = bits>>6 & 0x3f; |
||
36 | h4 = bits & 0x3f; |
||
37 | |||
38 | DSBYTE[buffer] = DSBYTE[#b64_symbols+h1];buffer++; |
||
39 | DSBYTE[buffer] = DSBYTE[#b64_symbols+h2];buffer++; |
||
40 | DSBYTE[buffer] = DSBYTE[#b64_symbols+h3];buffer++; |
||
41 | DSBYTE[buffer] = DSBYTE[#b64_symbols+h4];buffer++; |
||
42 | } while(end > data); |
||
43 | switch(length % 3) |
||
44 | { |
||
45 | case 1: |
||
46 | buffer--; |
||
47 | DSBYTE[buffer] = '='; |
||
48 | buffer--; |
||
49 | DSBYTE[buffer] = '='; |
||
50 | buffer+=2; |
||
51 | break; |
||
52 | case 2: |
||
53 | buffer--; |
||
54 | DSBYTE[buffer] = '='; |
||
55 | buffer++; |
||
56 | break; |
||
57 | } |
||
58 | DSBYTE[buffer] = 0; |
||
59 | }8; |