Esto es lo que reescribí después de leer varias funciones de codificación y decodificación base64.
Debido a que en VBscript del sistema operativo chino se utiliza el juego de caracteres Unicode, muchas funciones de codificación y decodificación base64 son correctas en teoría, ¡pero no se pueden ejecutar en la práctica!
Nombre de archivo base64test.asp
<%
sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)
Función strUnicodeLen(asContents)
'Calcula la longitud de la codificación Ansi de la cadena Unicode
asContenidos1="a"&asContenidos
len1=len(comoContenido1)
k=0
para i=1 a len1
asc1=asc(mid(asContents1,i,1))
si asc1<0 entonces asc1=65536+asc1
si asc1>255 entonces
k=k+2
demás
k=k+1
terminar si
próximo
strUnicodeLen=k-1
Función final
Función strUnicode2Ansi(asContents)
'Convierte una cadena codificada en Unicode a una cadena codificada en Ansi
strUnicode2Ansi=""
len1=len(comoContenido)
para i=1 a len1
varchar=mid(comoContenido,i,1)
varasc=asc(varchar)
si varasc<0 entonces varasc=varasc+65536
si varasc>255 entonces
varHex=Hex(varasc)
varlow=izquierda(varHex,2)
varalto=derecho(varHex,2)
strUnicode2Ansi=strUnicode2Ansi & chrb("&H" & varlow) & chrb("&H" & varhigh)
demás
strUnicode2Ansi=strUnicode2Ansi & chrb(varasc)
terminar si
próximo
Función final
Función strAnsi2Unicode(asContents)
'Convierte una cadena codificada en Ansi a una cadena codificada en Unicode
strAnsi2Unicode = ""
len1=lenb(comoContenido)
si len1=0 entonces sale de la función
para i=1 a len1
varchar=midb(comoContenido,i,1)
varasc=ascb(varchar)
si varasc > 127 entonces
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
yo=yo+1
demás
strAnsi2Unicode = strAnsi2Unicode & chr(varasc)
terminar si
próximo
Función final
Función Base64encode(asContents)
'Base64 codifica la cadena codificada en Ansi
'asContents debe ser una cadena codificada ANSI (las cadenas binarias también son aceptables)
Posición tenue
Resultado ls tenue
Char1 tenue
Char2 tenue
Char3 tenue
Char4 tenue
Byte1 atenuado
Byte2 atenuado
Byte3 oscuro
Atenuar SaveBits1
Atenuar SaveBits2
Dim lsGroupBinary
tenue lsGroup64
Dim m4,len1,len2
len1=Lenb(asContents)
si len1<1 entonces
Código base64=""
Función de salida
finalizar si
m3=Len1 Mod 3
Si M3 > 0 Entonces asContents = asContents & String(3-M3, chrb(0))
'El número de dígitos suplementarios es para facilitar el cálculo
SI m3 > 0 ENTONCES
longitud1=len1+(3-m3)
len2=len1-3
demás
longitud2=len1
end if
lsResult = ""
Para lnPosition = 1 A len2 Paso 3
lsGroup64 = ""
lsGroupBinary = Midb(asContents, lnPosition, 3)
Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 y 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 y 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))
Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 y 252) 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 y 240) 16) O (SaveBits1 * 16) y &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 y 192) 64) O (SaveBits2 * 4) y &HFF) + 1, 1)
Char4 = Midb(sBASE_64_CHARACTERS, (Byte3 y 63) + 1, 1)
lsGroup64 = Char1 y Char2 y Char3 y Char4
lsResult = lsResult y lsGroup64
Siguiente
'Procesar los últimos caracteres restantes
si M3 > 0 entonces
lsGroup64 = ""
lsGroupBinary = Midb(asContents, len2+1, 3)
Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 y 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 y 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))
Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 y 252) 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 y 240) 16) O (SaveBits1 * 16) y &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 y 192) 64) O (SaveBits2 * 4) y &HFF) + 1, 1)
si M3=1 entonces
lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) 'Utilice el signo = para completar los dígitos
demás
lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) 'Utilice el signo = para formar los dígitos
finalizar si
lsResult = lsResult & lsGroup64
finalizar si
Base64encode = lsResult
Función final
Función Base64decode (como contenido)
'Convierte una cadena codificada en Base64 a una cadena codificada en Ansi
'asContents también debe ser una cadena codificada ANSI (las cadenas binarias también son aceptables)
Resultado ls tenue
Posición tenue
Dim lsGroup64, lsGroupBinary
Atenuar Char1, Char2, Char3, Char4
Atenuar Byte1, Byte2, Byte3
Dim M4,len1,len2
len1= Lenb(como contenido)
M4 = len1 Mod 4
si len1 < 1 o M4 > 0 entonces
'La longitud de la cadena debe ser múltiplo de 4
Código base64 = ""
Función de salida
end if
'Juzga si el último dígito es el signo =
'Determinar si el penúltimo dígito es el signo =
'Aquí m4 representa el último número restante de caracteres que deben procesarse por separado
si midb(asContents, len1, 1) = chrb(61) entonces m4=3
si midb(asContents, len1-1, 1) = chrb(61) entonces m4=2
si m4 = 0 entonces
longitud2=len1
demás
longitud2=len1-4
finalizar si
para lnPosition = 1 a Len2 Paso 4
lsGroupBinary = ""
lsGroup64 = Midb(asContenido, 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 y 48) 16) o (Char1 * 4) y &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 y 60) 4) o (Char2 * 16) y &HFF)
Byte3 = Chrb((((Char3 y 3) * 64) y &HFF) o (Char4 y 63))
lsGroupBinary = Byte1 y Byte2 y Byte3
lsResult = lsResult y lsGroupBinary
Siguiente
'Procesar los últimos caracteres restantes
si M4 > 0 entonces
lsGroupBinary = ""
lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65) 'chr(65)=A, convertido al valor 0
si M4=2 entonces 'Agregue 4 dígitos para facilitar el cálculo
lsGroup64 = lsGroup64 y chrB(65)
terminar si
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 y 48) 16) o (Char1 * 4) y &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 y 60) 4) o (Char2 * 16) y &HFF)
Byte3 = Chrb((((Char3 y 3) * 64) y &HFF) o (Char4 y 63))
si M4=2 entonces
lsGroupBinary = Byte1
de lo contrario, si M4 = 3, entonces
lsGroupBinary = Byte1 y Byte2
finalizar si
lsResult = lsResult & lsGroupBinary
finalizar si
Base64decode = lsResult
Función final