<%


Option Explicit





Dim sBASE_64_CHARACTERS, sBASE_64_CHARACTERSansi


sBASE_64_CHARACTERS


= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"


sBASE_64_CHARACTERSansi = strUnicode2Ansi(sBASE_64_CHARACTERS)








Function strUnicodeLen(asContents)


Dim asContents1 : asContents1 ="a" & asContents


Dim Len1 : Len1=Len(asContents1)


Dim K : K=0


Dim I, Asc1





For I=1 To Len1


Asc1 = asc(mid(asContents1,I,1))


IF Asc1 < 0 Then Asc1 = 65536 + Asc1


IF Asc1 > 255 Then


K = K + 2


ELSE


K = K + 1


End IF


Next





strUnicodeLen = K - 1


End Function





Function strUnicode2Ansi(asContents)


Dim Len1 : Len1 = Len(asContents)


Dim I, VarCHAR, VarASC, VarHEX, VarLOW, VarHIGH





strUnicode2Ansi = ""





For I = 1 to Len1


VarCHAR = Mid(asContents,I,1)


VarASC = Asc(VarCHAR)


IF VarASC < 0 Then VarASC = VarASC + 65536


IF VarASC > 255 Then


VarHEX = Hex(VarASC)


VarLOW = Left(VarHEX,2)


VarHIGH = Right(VarHEX,2)


strUnicode2Ansi = strUnicode2Ansi & ChrB("&H" & VarLOW ) & ChrB


("&H" & VarHIGH )


Else


strUnicode2Ansi = strUnicode2Ansi & ChrB(VarASC)


End IF


Next


End Function











Function strAnsi2Unicode(asContents)


Dim Len1 : Len1 = LenB(asContents)


Dim VarCHAR, VarASC, I





strAnsi2Unicode = ""





IF Len1=0 Then Exit Function





For I=1 To Len1


VarCHAR = MidB(asContents,I,1)


VarASC = AscB(VarCHAR)


IF VarASC > 127 Then


strAnsi2Unicode = strAnsi2Unicode & Chr(AscW(MidB(asContents,


I+1,1) & VarCHAR))


I = I + 1


Else


strAnsi2Unicode = strAnsi2Unicode & Chr(VarASC)


End IF


Next





End function





Function Base64encode(asContents)


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 M3, M4, Len1, Len2





Len1 =LenB(asContents)





IF Len1 < 1 Then


Base64encode = ""


Exit Function


End IF





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


Else


Len2 = Len1


End IF





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_CHARACTERSansi, ((Byte1 And 252)  4) + 1,


1)


Char2 = MidB(sBASE_64_CHARACTERSansi, (((Byte2 And 240)  16)


Or (SaveBits1 * 16) And &HFF) + 1, 1)


Char3 = MidB(sBASE_64_CHARACTERSansi, (((Byte3 And 192)  64)


Or (SaveBits2 * 4) And &HFF) + 1, 1)


Char4 = MidB(sBASE_64_CHARACTERSansi, (Byte3 And 63) + 1, 1)


lsGroup64 = Char1 & Char2 & Char3 & Char4





lsResult = lsResult & lsGroup64


Next





IF 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_CHARACTERSansi, ((Byte1 And 252)  4) + 1,


1)


Char2 = MidB(sBASE_64_CHARACTERSansi, (((Byte2 And 240)  16)


Or (SaveBits1 * 16) And &HFF) + 1, 1)


Char3 = MidB(sBASE_64_CHARACTERSansi, (((Byte3 And 192)  64)


Or (SaveBits2 * 4) And &HFF) + 1, 1)





IF M3=1 Then


lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61)


Else


lsGroup64 = Char1 & Char2 & Char3 & ChrB(61)


End IF





lsResult = lsResult & lsGroup64


End IF





Base64encode = lsResult


End Function





Function Base64decode(asContents)


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





IF Len1 < 1 Or M4 > 0 Then


Base64decode = ""


Exit Function


End IF





IF MidB(asContents, Len1, 1) = ChrB(61) Then M4 = 3


IF MidB(asContents, Len1-1, 1) = ChrB(61) Then M4 = 2





IF M4 = 0 Then


Len2 = Len1


Else


Len2 = Len1 - 4


End IF





For lnPosition = 1 To Len2 Step 4


lsGroupBinary = ""


lsGroup64 = MidB(asContents, lnPosition, 4)





Char1 = InStrB(sBASE_64_CHARACTERSansi, MidB(lsGroup64, 1, 1)) -


1


Char2 = InStrB(sBASE_64_CHARACTERSansi, MidB(lsGroup64, 2, 1)) -


1


Char3 = InStrB(sBASE_64_CHARACTERSansi, MidB(lsGroup64, 3, 1)) -


1


Char4 = InStrB(sBASE_64_CHARACTERSansi, 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





IF M4 > 0 Then


lsGroupBinary = ""


lsGroup64 = MidB(asContents, Len2 + 1, M4) & ChrB(65)


IF M4=2 Then


lsGroup64 = lsGroup64 & chrB(65)


End IF


Char1 = InStrB(sBASE_64_CHARACTERSansi, MidB(lsGroup64, 1, 1)) - 1


Char2 = InStrB(sBASE_64_CHARACTERSansi, MidB(lsGroup64, 2, 1)) - 1


Char3 = InStrB(sBASE_64_CHARACTERSansi, MidB(lsGroup64, 3, 1)) - 1


Char4 = InStrB(sBASE_64_CHARACTERSansi, 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))





IF M4=2 Then


lsGroupBinary = Byte1


elseIF M4=3 Then


lsGroupBinary = Byte1 & Byte2


end IF





lsResult = lsResult & lsGroupBinary


End IF





Base64decode = lsResult


End Function








'################################## 사용 샘플 ##################################


Dim ORIGNvalue : ORIGNvalue = "하완어환오라ㅓ고ㅓ엉ㅁㄹ22ㅁㅁ@@ㅇㅁㄹ;ㄴㅇ


aabcsdfaeerdfadf"


Dim EncodeA : EncodeA = strAnsi2Unicode(Base64encode(strUnicode2Ansi


(ORIGNvalue)))


Dim DecodeA : DecodeA = strAnsi2Unicode(Base64decode(strUnicode2Ansi(EncodeA)))





response.write "------------------------------------------------------------------------<BR>"


response.write "lsResult : " & ORIGNvalue & "<BR>"


response.write "lsResult : " & EncodeA & "<BR>"


response.write "lsResult : " & DecodeA & "<BR>"


response.write "------------------------------------------------------------------------<BR>"





%>


참고로 이건 제가 한건 아니고 아는 친구가 한건데 꼭 asp로만 해야하는 경우엔 사용해보세요...


길어서 설명은 그렇구요...뭐 간단히 말씀드리면 ANSI->Base64->유니코드 이런식으로 알고 있습니다.


것보담은 잘 못보는 asp 표현 형태가 있을겁니다. MSDN에 찾아보면 다 나오구요...


개인적으로 asp에 이런 표현도 있구나 하고 놀랐던 기억이 있습니다. 함 공부들 해보세요~~





dll 형태로 만들어본적도 있는데요. 그건 외국 컴포넌트 응용해서 만들어봤습니다.


결과는 동일하더군요. 아마 base64의 원리가 이런것 같습니다.


좋은 날 되세요~


vb의
2009/05/26 13:44 2009/05/26 13:44

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다