Dies ist, was ich neu geschrieben habe, nachdem ich mehrere Base64-Codierungs- und Decodierungsfunktionen gelesen hatte.
Da in VBscript des chinesischen Betriebssystems der Unicode-Zeichensatz verwendet wird, sind viele Base64-Kodierungs- und Dekodierungsfunktionen theoretisch korrekt, können jedoch in der Praxis nicht ausgeführt werden!
Dateiname base64test.asp
<%
sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)
Funktion strUnicodeLen(asContents)
'Berechnen Sie die Länge der Ansi-Kodierung des Unicode-Strings
asContents1="a"&asContents
len1=len(asContents1)
k=0
für i=1 bis len1
asc1=asc(mid(asContents1,i,1))
Wenn asc1<0, dann ist asc1=65536+asc1
wenn asc1>255 dann
k=k+2
anders
k=k+1
Ende wenn
nächste
strUnicodeLen=k-1
Endfunktion
Funktion strUnicode2Ansi(asContents)
'Unicode-codierte Zeichenfolge in Ansi-codierte Zeichenfolge konvertieren
strUnicode2Ansi=""
len1=len(asContents)
für i=1 bis len1
varchar=mid(asContents,i,1)
varasc=asc(varchar)
Wenn varasc<0, dann ist varasc=varasc+65536
wenn varasc>255 dann
varHex=Hex(varasc)
varlow=left(varHex,2)
varhigh=right(varHex,2)
strUnicode2Ansi=strUnicode2Ansi & chrb("&H" & varlow ) & chrb("&H" & varhigh )
anders
strUnicode2Ansi=strUnicode2Ansi & chrb(varasc)
Ende wenn
nächste
Funktion beenden
Funktion strAnsi2Unicode(asContents)
'Ansi-codierte Zeichenfolge in Unicode-codierte Zeichenfolge konvertieren
strAnsi2Unicode = ""
len1=lenb(asContents)
Wenn len1=0, dann beenden Sie die Funktion
für i=1 bis len1
varchar=midb(asContents,i,1)
varasc=ascb(varchar)
wenn varasc > 127 dann
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
i=i+1
anders
strAnsi2Unicode = strAnsi2Unicode & chr(varasc)
Ende wenn
nächste
Funktion beenden
Funktion Base64encode(asContents)
'Base64 kodiert die Ansi-kodierte Zeichenfolge
'asContents sollte eine ANSI-codierte Zeichenfolge sein (binäre Zeichenfolgen sind ebenfalls akzeptabel)
lnPosition dimmen
Dimmen Sie lsResult
Dim Char1
Dim Char2
Dim Char3
Dim Char4
Dimmen Sie Byte1
Dimmen Sie Byte2
Dimmen Sie Byte3
SaveBits1 dimmen
SaveBits2 dimmen
Dimmen Sie lsGroupBinary
Dimmen Sie lsGroup64
Dim m4,len1,len2
len1=Lenb(asContents)
wenn len1<1 dann
Base64encode=""
Exit-Funktion
Ende, wenn
m3=Len1 Mod 3
Wenn M3 > 0, dann asContents = asContents & String(3-M3, chrb(0))
„Die Anzahl der zusätzlichen Ziffern soll die Berechnung erleichtern,
WENN m3 > 0 DANN
len1=len1+(3-m3)
len2=len1-3
anders
len2=len1
end if
lsResult = ""
For lnPosition = 1 To len2 Schritt 3
lsGroup64 = ""
lsGroupBinary = Midb(asContents, lnPosition, 3)
Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 und 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 und 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))
Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 und 252) 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 und 240) 16) oder (SaveBits1 * 16) und &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 und 192) 64) oder (SaveBits2 * 4) und &HFF) + 1, 1)
Char4 = Midb(sBASE_64_CHARACTERS, (Byte3 und 63) + 1, 1)
lsGroup64 = Char1 & Char2 & Char3 & Char4
lsResult = lsResult & lsGroup64
Weiter:
„Verarbeiten Sie die letzten verbleibenden Zeichen.“
wenn M3 > 0 dann
lsGroup64 = ""
lsGroupBinary = Midb(asContents, len2+1, 3)
Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 und 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 und 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))
Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 und 252) 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 und 240) 16) oder (SaveBits1 * 16) und &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
wenn M3=1 dann
lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) 'Verwenden Sie das =-Zeichen, um die Ziffern einzugeben
anders
lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) 'Verwenden Sie =-Zeichen, um die Ziffern zu bilden
Ende, wenn
lsResult = lsResult & lsGroup64
end if
Base64encode = lsResult
End Function
Funktion Base64decode(asContents)
'Base64-codierte Zeichenfolge in Ansi-codierte Zeichenfolge konvertieren
'asContents sollte auch eine ANSI-codierte Zeichenfolge sein (binäre Zeichenfolgen sind ebenfalls akzeptabel)
Dimmen Sie lsResult
lnPosition dimmen
Dimmen Sie lsGroup64, lsGroupBinary
Dimmen Sie Char1, Char2, Char3, Char4
Dimmen Sie Byte1, Byte2, Byte3
Dim M4,len1,len2
len1= Lenb(asContents)
M4 = len1 Mod 4
wenn len1 < 1 oder M4 > 0 dann
'Die Stringlänge sollte ein Vielfaches von 4 sein
Base64decode = ""
Exit-Funktion
end if
'Beurteilen Sie, ob die letzte Ziffer ein =-Zeichen ist
'Bestimmen Sie, ob die vorletzte Ziffer ein =-Zeichen ist
'Hier stellt m4 die letzte verbleibende Anzahl von Zeichen dar, die separat verarbeitet werden müssen
wenn midb(asContents, len1, 1) = chrb(61), dann m4=3
wenn midb(asContents, len1-1, 1) = chrb(61) dann m4=2
wenn m4 = 0 dann
len2=len1
anders
len2=len1-4
end if
For lnPosition = 1 To Len2 Schritt 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 Und 48) 16) Oder (Char1 * 4) Und &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 And 60) 4) Or (Char2 * 16) And &HFF)
Byte3 = Chrb((((Char3 und 3) * 64) und &HFF) oder (Char4 und 63))
lsGroupBinary = Byte1 & Byte2 & Byte3
lsResult = lsResult & lsGroupBinary
Weiter:
„Verarbeiten Sie die letzten verbleibenden Zeichen.“
wenn M4 > 0 dann
lsGroupBinary = ""
lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65) 'chr(65)=A, konvertiert in den Wert 0
Wenn M4=2, dann „4 Ziffern hinzufügen, um die Berechnung zu erleichtern.“
lsGroup64 = lsGroup64 & chrB(65)
Ende wenn
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 Und 48) 16) Oder (Char1 * 4) Und &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 And 60) 4) Or (Char2 * 16) And &HFF)
Byte3 = Chrb((((Char3 Und 3) * 64) Und &HFF) Oder (Char4 Und 63))
wenn M4=2 dann
lsGroupBinary = Byte1
sonst wenn M4=3 dann
lsGroupBinary = Byte1 & Byte2
Ende, wenn
lsResult = lsResult & lsGroupBinary
end if
Base64decode = lsResult
End Function