これは、base64 エンコードおよびデコード関数をいくつか読んだ後に書き直したものです。
中国語のオペレーティング システムの VBscript では Unicode 文字セットが使用されているため、多くの Base64 エンコードおよびデコード関数は理論的には正しいのですが、実際には実行できません。
ファイル名base64test.asp
<%
sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)
関数 strUnicodeLen(asContents)
'Unicode文字列のAnsiエンコーディングの長さを計算します
asContents1="a"&asContents
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
終了関数
Function strUnicode2Ansi(asContents)
'Unicode でエンコードされた文字列を 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=left(varHex,2)
varhigh=right(varHex,2)
strUnicode2Ansi=strUnicode2Ansi & chrb("&H" & varlow ) & chrb("&H" & varhigh )
それ以外
strUnicode2Ansi=strUnicode2Ansi & chrb(varasc)
終了する場合
次
関数終了
関数 strAnsi2Unicode(asContents)
'Ansi エンコードされた文字列を Unicode エンコードされた文字列に変換します
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))
i=i+1
それ以外
strAnsi2Unicode = strAnsi2Unicode & chr(varasc)
終了する場合
次
関数終了
Function Base64encode(asContents)
'Ansi エンコードされた文字列を Base64 エンコードします
'asContents は ANSI エンコードされた文字列である必要があります (バイナリ文字列も受け入れられます)
寸法の位置
薄暗い結果
ディムチャー1
ディムチャー2
ディムチャー3
ディムチャー4
ディムバイト1
ディムバイト2
ディムバイト3
ディムセーブビット1
ディムセーブビット2
Dim lsGroupBinary
ディム lsGroup64
Dim 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
それ以外
レン2=レン1
end if
lsResult = ""
lnPosition = 1 の場合 len2 へ ステップ 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) または (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, (Byte3 および 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 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) または (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
の場合に終了
end if
Base64encode = lsResult
終了関数
関数 Base64decode(asContents)
'Base64 エンコード文字列を Ansi エンコード文字列に変換します
'asContents も ANSI エンコードされた文字列である必要があります (バイナリ文字列も受け入れられます)
薄暗い結果
寸法の位置
Dim lsGroup64、lsGroupBinary
ディム Char1、Char2、Char3、Char4
ディム Byte1、Byte2、Byte3
Dim M4,len1,len2
len1= Lenb(asContents)
M4 = len1 Mod 4
if len1 < 1 または M4 > 0 then
'文字列の長さは 4 の倍数である必要があります
Base64デコード = ""
終了関数
end if
'最後の桁が=記号かどうかを判定
'最後から 2 番目の数字が = 記号であるかどうかを判断します
'ここで、m4 は個別に処理する必要がある最後の残りの文字数を表します
Midb(asContents, len1, 1) = chrb(61) の場合、m4=3
if midb(asContents, len1-1, 1) = chrb(61) then m4=2
if m4 = 0 then
レン2=レン1
それ以外
len2=len1-4
end if
lnPosition = 1 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 And 3) * 64) And &HFF) Or (Char4 And 63))
lsGroupBinary = バイト 1 & バイト 2 & バイト 3
lsResult = lsResult & lsGroupBinary
Next
'残りの最後の数文字を処理します
M4 > 0の場合
lsGroupBinary = ""
lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65) 'chr(65)=A、値 0 に変換
if M4=2 then '計算を容易にするために 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))
M4=2 の場合
lsGroupBinary = バイト 1
elseif M4=3 then
lsGroupBinary = バイト 1 およびバイト 2
lsResult = lsResult & lsGroupBinary
の場合に終了
end if
Base64decode = lsResult
終了関数