为啥我的base64加密的和你们的不一样呢
你们的代码
加密前为:你好
加密后为:5L2g5aW9
解密后为:你好
但我的为啥是
加密前为:你好
加密后为:JiMyMDMyMDsmIzIyOTA5Ow==
解密后为:你好
- <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
- <%
- session.codepage=65001
- response.charset="utf-8"
- server.scripttimeout=999999%>
- <%
- '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
- 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
- Function UrlDecode(encodestr)
- newstr=""
- havechar=false
- lastchar=""
- for i=1 to len(encodestr)
- char_c=mid(encodestr,i,1)
- if char_c="+" then
- newstr=newstr & " "
- elseif char_c="%" then
- next_1_c=mid(encodestr,i+1,2)
- next_1_num=cint("&h" & next_1_c)
- if havechar then
- havechar=false
- newstr=newstr & chr(cint("&h" & lastchar & next_1_c))
- else
- if abs(next_1_num)<=127 then
- newstr=newstr & chr(next_1_num)
- else
- havechar=true
- lastchar=next_1_c
- end if
- end if
- i=i+2
- else
- newstr=newstr & char_c
- end if
- next
- UrlDecode=newstr
- End Function
- call initCodecs
- inp = "你好"
- inp=server.htmlEncode(inp)
- encode = base64Encode(inp)
- decode= base64Decode(encode)
- response.write "urlE = " & inp & nl
- response.write "Encoded value = " & encode & nl
- response.write "Decoded value = " & UrlDecode(decode) & nl
- %>
复制代码
好像和编码有关 |