<% OPTION EXPLICIT const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" dim nl ' zero based arrays dim Base64EncMap(63) dim Base64DecMap(127)
' must be called before using anything else PUBLIC SUB initCodecs() ' init vars nl = "<P>" & chr(13) & chr(10) ' setup base 64 dim max, idx max = len(BASE_64_MAP_INIT) for idx = 0 to max - 1 ' one based string Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1) next for idx = 0 to max - 1 Base64DecMap(ASC(Base64EncMap(idx))) = idx next END SUB
' encode base 64 encoded string PUBLIC FUNCTION base64Encode(plain)
if len(plain) = 0 then base64Encode = "" exit function end if
dim ret, ndx, by3, first, second, third by3 = (len(plain) \ 3) * 3 ndx = 1 do while ndx <= by3 first = asc(mid(plain, ndx+0, 1)) second = asc(mid(plain, ndx+1, 1)) third = asc(mid(plain, ndx+2, 1)) ret = ret & Base64EncMap( (first \ 4) AND 63 ) ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) ) ret = ret & Base64EncMap( third AND 63) ndx = ndx + 3 loop ' check for stragglers &n