ASP Base64加解密程序

<% 
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 
dim nl
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 
if by3 < len(plain) then 
first = asc(mid(plain, ndx+0, 1)) 
ret = ret & Base64EncMap( (first \ 4) AND 63 ) 
if (len(plain) MOD 3 ) = 2 then 
second = asc(mid(plain, ndx+1, 1)) 
ret = ret & Base64EncMap(((first * 16) AND 48) + ((second \ 16) AND 15 ) ) 
ret = ret & Base64EncMap(((second * 4) AND 60)) 
else 
ret = ret & Base64EncMap((first * 16) AND 48) 
ret = ret & "=" 
end if 
ret = ret & "=" 
end if 

base64Encode = ret 
END FUNCTION 

' decode base 64 encoded string 
PUBLIC FUNCTION base64Decode(scrambled) 

if len(scrambled) = 0 then 
base64Decode = "" 
exit function 
end if 

' ignore padding 
dim realLen 
realLen = len(scrambled) 
do while mid(scrambled, realLen, 1) = "=" 
realLen = realLen - 1 
loop 
dim ret, ndx, by4, first, second, third, fourth 
ret = "" 
by4 = (realLen \ 4) * 4 
ndx = 1 
do while ndx <= by4 
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) 
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) 
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1))) 
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) 
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15) ) 
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) 
ndx = ndx + 4 
loop 
' check for stragglers, will be 2 or 3 characters 
if ndx < realLen then 
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) 
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) 
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 
if realLen MOD 4 = 3 then 
third = Base64DecMap(asc(mid(scrambled,ndx+2,1))) 
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) 
end if 
end if 

base64Decode = ret 
END FUNCTION 

' initialize 
call initCodecs 

' Testing code 
dim inp, encode 
inp = request.QueryString("input") 
encode = base64Encode(inp) 
response.write "Encoded value = " & encode & nl 
response.write "Decoded value = " & base64Decode(encode) & nl 
%>

有图有真相:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值