이것은 여러 base64 인코딩 및 디코딩 기능을 읽은 후 다시 작성한 내용입니다.
중국 운영 체제의 VBscript에서는 유니코드 문자 집합이 사용되기 때문에 많은 base64 인코딩 및 디코딩 기능이 이론적으로는 정확하지만 실제로는 실행될 수 없습니다!
파일 이름 base64test.asp
<%
sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)
함수 strUnicodeLen(asContents)
'유니코드 문자열의 Ansi 인코딩 길이를 계산합니다.
asContents1="a"&as콘텐츠
len1=len(asContents1)
k=0
i=1부터 len1까지
asc1=asc(mid(asContents1,i,1))
asc1<0이면 asc1=65536+asc1
asc1>255이면
k=k+2
또 다른
k=k+1
종료하면
다음
strUnicodeLen=k-1
끝 함수
함수 strUnicode2Ansi(asContents)
'유니코드로 인코딩된 문자열을 Ansi로 인코딩된 문자열로 변환
strUnicode2Ansi=""
len1=len(컨텐츠로)
i=1에서 len1까지
varchar=mid(asContents,i,1)
varasc=asc(varchar)
varasc<0이면 varasc=varasc+65536
varasc>255이면
varHex=16진수(varasc)
varlow=왼쪽(varHex,2)
varhigh=오른쪽(varHex,2)
strUnicode2Ansi=strUnicode2Ansi & chrb("&H" & varlow ) & chrb("&H" & varhigh )
또 다른
strUnicode2Ansi=strUnicode2Ansi & chrb(varasc)
종료하면
다음
종료 기능
기능 strAnsi2Unicode(asContents)
'Ansi로 인코딩된 문자열을 유니코드로 인코딩된 문자열로 변환
strAnsi2Unicode = ""
len1=lenb(컨텐츠)
len1=0이면 함수를 종료합니다.
i=1부터 len1까지
varchar=midb(asContents,i,1)
varasc=ascb(varchar)
varasc > 127이면
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
나=나+1
또 다른
strAnsi2Unicode = strAnsi2Unicode & chr(varasc)
종료하면
다음
종료 기능
기능 Base64encode(asContents)
'Ansi로 인코딩된 문자열을 Base64로 인코딩합니다.
'asContents는 ANSI로 인코딩된 문자열이어야 합니다(바이너리 문자열도 허용됨)
희미한 위치
희미한 lsResult
희미한 문자1
희미한 Char2
희미한 Char3
희미한 Char4
희미한 바이트1
희미한 바이트2
희미한 바이트3
희미한 SaveBits1
희미한 SaveBits2
희미한 lsGroupBinary
희미한 lsGroup64
희미한 m4,len1,len2
len1=Lenb(asContents)
len1<1이면
Base64인코드=""
종료 기능
m3=Len1 Mod 3
이면 종료됩니다
.
M3 > 0이면 asContents = asContents & String(3-M3, chrb(0))
'보조 자릿수는 계산을 용이하게 하기 위한 것입니다.
IF m3 > 0 THEN
len1=len1+(3-m3)
len2=len1-3
또 다른
len2=len1
end if
lsResult = ""
lnPosition = 1의 경우 len2로 3단계
lsGroup64 = ""
lsGroupBinary = Midb(asContents, lnPosition, 3)
Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 및 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 및 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) 또는 (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) 64) 또는 (SaveBits2 * 4) And &HFF) + 1, 1)
Char4 = Midb(sBASE_64_CHARACTERS, (바이트3 및 63) + 1, 1)
lsGroup64 = Char1 & Char2 & Char3 & Char4
lsResult = lsResult & lsGroup64
Next
'마지막 남은 문자 몇 개를 처리합니다.
M3 > 0이면
lsGroup64 = ""
lsGroupBinary = Midb(asContents, len2+1, 3)
Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 및 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 및 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) 또는 (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
M3=1인 경우
lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) ' = 기호를 사용하여 숫자를 입력하세요.
또 다른
lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) '= 기호를 사용하여 숫자를 구성하세요.
lsResult = lsResult & lsGroup64
인 경우 종료됩니다.
Base64encode = lsResult
인 경우
종료 함수
종료
기능 Base64decode(asContents)
'Base64로 인코딩된 문자열을 Ansi로 인코딩된 문자열로 변환
'asContents는 ANSI로 인코딩된 문자열이어야 합니다(바이너리 문자열도 허용됨).
희미한 lsResult
희미한 위치
희미한 lsGroup64, lsGroupBinary
희미한 Char1, Char2, Char3, Char4
희미한 바이트1, 바이트2, 바이트3
희미한 M4,len1,len2
len1= Lenb(asContents)
M4 = len1 Mod 4
len1 < 1 또는 M4 > 0이면
'문자열 길이는 4의 배수여야 합니다.
Base64decode = ""
종료 기능
end if
'마지막 숫자가 = 부호인지 판단
'두 번째 숫자가 = 부호인지 확인
'여기서 m4는 별도로 처리해야 하는 마지막 남은 문자 수를 나타냅니다.
midb(asContents, len1, 1) = chrb(61)이면 m4=3
midb(asContents, len1-1, 1) = chrb(61)이면 m4=2
이면 m4 = 0이면
len2=len1
또 다른
len2=len1-4
For lnPosition = 1 To Len2
인 경우 종료
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) 또는 (Char1 * 4) And &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 And 60) 4) 또는 (Char2 * 16) And &HFF)
Byte3 = Chrb((((Char3 및 3) * 64) 및 &HFF) 또는 (Char4 및 63))
lsGroupBinary = Byte1 & Byte2 & Byte3
lsResult = lsResult & lsGroupBinary
Next
'마지막 남은 문자 몇 개를 처리합니다.
M4 > 0이면
lsGroupBinary = ""
lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65) 'chr(65)=A, 값 0으로 변환
M4=2이면 '계산을 용이하게 하려면 4자리를 추가하세요.
lsGroup64 = lsGroup64 & chrB(65)
종료하면
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) 또는 (Char1 * 4) And &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 And 60) 4) 또는 (Char2 * 16) And &HFF)
Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))
if M4=2
lsGroupBinary = 바이트1
elseif M4=3이면
lsGroupBinary = 바이트1 및 바이트2
lsResult = lsResult & lsGroupBinary
인 경우 종료됩니다.
Base64decode = lsResult
인 경우
종료 함수
종료