<%
' OPTION EXPLICIT //强制声明变量
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ "
dim nl
' zero based arrays //零基础数组
dim Base64EncMap()
dim Base64DecMap(127)
' must be called before using anything else //在使用前必须被别的什么吗
PUBLIC SUB initCodecs()
' init vars
nl = " <P> " & chr(13) & chr(10)
' setup base 64 //设置基地64
dim max, idx
max = len(BASE_64_MAP_INIT)
'response.Write(mid(BASE_64_MAP_INIT,idx+1,1))
' response.End()
redim Base64EncMap(max-1)
for idx =0 to max-1
' one based string
'response.Write("yy"&idx&"yy")
' 'response.End()
Base64EncMap(idx)=mid(BASE_64_MAP_INIT,idx+1,1)
next
for idx = 0 to max - 1
Base64DecMap(ASC(Base64EncMap(idx))) = idx
' response.Write(Base64EncMap(idx)&Base64EncMap(idx))
next
END SUB
' encode base 64 encoded string //编码base 64编码的字符串
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 //检查掉队
if by3 < len(plain) then
first = asc(mid(plain, ndx+0, 1))
ret = ret & Base64EncMap( (first \ 4) AND 63 )