asp加密解密:BASE64加密解密ASP函数



<%
sBASE_64_CHARACTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"
sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)

Function strUnicodeLen(asContents)
\'计算unicodeAnsi编码长度
asContents1=\"a\"&asContents
len1=len(asContents1)
k=0
for i=1 to len1
asc1=asc(mid(asContents1,i,1))
asc1<0 then asc1=65536+asc1
asc1>255 then
k=k+2

k=k+1
end
next
strUnicodeLen=k-1
End Function

Function strUnicode2Ansi(asContents)
\'将Unicode编码转换成Ansi编码
strUnicode2Ansi=\"\"
len1=len(asContents)
for i=1 to len1
varchar=mid(asContents,i,1)
varasc=asc(varchar)
varasc<0 then varasc=varasc+65536
varasc>255 then
varHex=Hex(varasc)
varlow=left(varHex,2)
varhigh=right(varHex,2)
strUnicode2Ansi=strUnicode2Ansi & chrb(\"&H\" & varlow ) & chrb(\"&H\" & varhigh )

strUnicode2Ansi=strUnicode2Ansi & chrb(varasc)
end
next
End function

Function strAnsi2Unicode(asContents)
\'将Ansi编码转换成Unicode编码
strAnsi2Unicode = \"\"
len1=lenb(asContents)
len1=0 then exit function
for i=1 to len1
varchar=midb(asContents,i,1)
varasc=ascb(varchar)
varasc > 127 then
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
i=i+1

strAnsi2Unicode = strAnsi2Unicode & chr(varasc)
end
next
End function

Function Base64encode(asContents)
\'将Ansi编码串进行Base64编码
\'asContents应当是ANSI编码串( 2进制串也可以)
Dim lnPosition
Dim lsResult
Dim Char1
Dim Char2
Dim Char3
Dim Char4
Dim Byte1
Dim Byte2
Dim Byte3
Dim SaveBits1
Dim SaveBits2
Dim lsGroupBinary
Dim lsGroup64
Dim m4,len1,len2

len1=Lenb(asContents)
len1<1 then
Base64encode=\"\"
exit Function
end

m3=Len1 Mod 3
If M3 > 0 Then asContents = asContents & String(3-M3, chrb(0))
\'补足位数是为了便于计算

IF m3 > 0 THEN
len1=len1+(3-m3)
len2=len1-3

len2=len1
end

lsResult = \"\"

For lnPosition = 1 To len2 Step 3
lsGroup64 = \"\"
lsGroupBinary = Midb(asContents, lnPosition, 3)

Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))

Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 And 252) \\ 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 And 240) \\ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) \\ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
Char4 = Midb(sBASE_64_CHARACTERS, (Byte3 And 63) + 1, 1)
lsGroup64 = Char1 & Char2 & Char3 & Char4

lsResult = lsResult & lsGroup64
Next

\'处理最后剩余几个
M3 > 0 then
lsGroup64 = \"\"
lsGroupBinary = Midb(asContents, len2+1, 3)

Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))

Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 And 252) \\ 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 And 240) \\ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) \\ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)

M3=1 then
lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) \'用=号补足位数

lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) \'用=号补足位数
end

lsResult = lsResult & lsGroup64
end

Base64encode = lsResult

End Function

Function Base64decode(asContents)
\'将Base64编码串转换成Ansi编码
\'asContents应当也是ANSI编码串( 2进制串也可以)
Dim lsResult
Dim lnPosition
Dim lsGroup64, lsGroupBinary
Dim Char1, Char2, Char3, Char4
Dim Byte1, Byte2, Byte3
Dim M4,len1,len2

len1= Lenb(asContents)
M4 = len1 Mod 4

len1 < 1 or M4 > 0 then
\'串长度应当是4倍数
Base64decode = \"\"
exit Function
end

\'判断最后位是不是 = 号
\'判断倒数第 2位是不是 = 号
\'这里m4表示最后剩余需要单独处理个数
midb(asContents, len1, 1) = chrb(61) then m4=3
midb(asContents, len1-1, 1) = chrb(61) then m4=2

m4 = 0 then
len2=len1

len2=len1-4
end

For lnPosition = 1 To Len2 Step 4
lsGroupBinary = \"\"
lsGroup64 = Midb(asContents, lnPosition, 4)
Char1 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 1, 1)) - 1
Char2 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 2, 1)) - 1
Char3 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 3, 1)) - 1
Char4 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 4, 1)) - 1
Byte1 = Chrb(((Char2 And 48) \\ 16) Or (Char1 * 4) And &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 And 60) \\ 4) Or (Char2 * 16) And &HFF)


Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))
lsGroupBinary = Byte1 & Byte2 & Byte3

lsResult = lsResult & lsGroupBinary
Next

\'处理最后剩余几个
M4 > 0 then
lsGroupBinary = \"\"
lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65) \'chr(65)=A转换成值为0
M4=2 then \'补足4位是为了便于计算
lsGroup64 = lsGroup64 & chrB(65)
end
Char1 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 1, 1)) - 1
Char2 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 2, 1)) - 1
Char3 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 3, 1)) - 1
Char4 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 4, 1)) - 1
Byte1 = Chrb(((Char2 And 48) \\ 16) Or (Char1 * 4) And &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 And 60) \\ 4) Or (Char2 * 16) And &HFF)
Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))

M4=2 then
lsGroupBinary = Byte1
M4=3 then
lsGroupBinary = Byte1 & Byte2
end

lsResult = lsResult & lsGroupBinary
end

Base64decode = lsResult

End Function

%>
Tags:  asp代码加密解密 asp源码加密解密 asp加密函数 asp加密解密

延伸阅读

最新评论

发表评论