Inilah yang saya tulis ulang setelah membaca beberapa fungsi pengkodean dan decoding base64.
Karena skrip VB sistem operasi Cina menggunakan kumpulan karakter unicode, sehingga banyak fungsi pengkodean dan decoding base64 yang benar secara teori, tetapi tidak dapat dijalankan dalam praktik!
Nama file base64test.asp
<%
sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)
Fungsi strUnicodeLen(asContents)
'Hitung panjang pengkodean Ansi dari string unicode
asContents1="a"&asContents
len1=len(sebagaiIsi1)
k=0
untuk i=1 hingga len1
asc1=asc(tengah(asContents1,i,1))
jika asc1<0 maka asc1=65536+asc1
jika asc1>255 maka
k=k+2
kalau tidak
k=k+1
berakhir jika
Berikutnya
strUnicodeLen=k-1
Fungsi Akhir
Fungsi strUnicode2Ansi(asContents)
'Konversi string berkode Unicode menjadi string berkode Ansi
strUnicode2Ansi=""
len1=len(sebagaiIsi)
untuk i=1 hingga len1
varchar=tengah(sebagaiIsi,i,1)
varasc=asc(varchar)
jika varasc<0 maka varasc=varasc+65536
jika varasc>255 maka
varHex=Hex(varasc)
varlow=kiri(varHex,2)
varhigh=kanan(varHex,2)
strUnicode2Ansi=strUnicode2Ansi & chrb("&H" & varlow ) & chrb("&H" & varhigh )
kalau tidak
strUnicode2Ansi=strUnicode2Ansi & chrb(varasc)
berakhir jika
Berikutnya
Fungsi akhir
Fungsi strAnsi2Unicode(asContents)
'Konversi string berkode Ansi menjadi string berkode Unicode
strAnsi2Unicode = ""
len1=lenb(sebagaiIsi)
jika len1=0 maka keluar dari fungsi
untuk i=1 hingga len1
varchar=midb(sebagaiIsi,i,1)
varasc=ascb(varchar)
jika varasc > 127 maka
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
saya=saya+1
kalau tidak
strAnsi2Unicode = strAnsi2Unicode & chr(varasc)
berakhir jika
Berikutnya
Fungsi akhir
Fungsi Base64encode(asContents)
'Base64 mengkodekan string yang dikodekan Ansi
'asContents harus berupa string yang dikodekan ANSI (string biner juga dapat diterima)
Redupkan Posisi
Redupkan Hasil
Redupkan Char1
Redupkan Char2
Redupkan Char3
Redupkan Char4
Redupkan Byte1
Redupkan Byte2
Redupkan Byte3
Redupkan SaveBits1
Redupkan SaveBits2
Redupkan lsGroupBinary
Redupkan Grup64
Redupkan m4,len1,len2
len1=Lenb(asContents)
jika len1<1 maka
Kode Base64=""
keluar Fungsi
berakhir jika
m3=Len1 Mod 3
Jika M3 > 0 Maka asContents = asContents & String(3-M3, chrb(0))
'Jumlah digit tambahan tersebut untuk memudahkan perhitungan
IF m3 > 0 THEN
len1=len1+(3-m3)
len2=len1-3
kalau tidak
len2=len1
end if
lsResult = ""
Untuk lnPosition = 1 Ke len2 Langkah 3
lsGrup64 = ""
lsGroupBinary = Midb(asContents, lnPosition, 3)
Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 Dan 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 Dan 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))
Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 Dan 252) 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 Dan 240) 16) Atau (SaveBits1 * 16) Dan &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 Dan 192) 64) Atau (SaveBits2 * 4) Dan &HFF) + 1, 1)
Char4 = Midb(sBASE_64_CHARACTERS, (Byte3 Dan 63) + 1, 1)
lsGroup64 = Char1 & Char2 & Char3 & Char4
lsResult = lsResult & lsGroup64
Berikutnya
'Proses beberapa karakter terakhir yang tersisa
jika M3 > 0 maka
lsGrup64 = ""
lsGroupBinary = Midb(asContents, len2+1, 3)
Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 Dan 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 Dan 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))
Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 Dan 252) 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 Dan 240) 16) Atau (SaveBits1 * 16) Dan &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 Dan 192) 64) Atau (SaveBits2 * 4) Dan &HFF) + 1, 1)
jika M3=1 maka
lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) 'Gunakan tanda = untuk mengisi angka
kalau tidak
lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) 'Gunakan = tanda tangan untuk membuat angkanya
berakhir jika
lsResult = lsResult & lsGroup64
berakhir jika
Base64encode = lsResult
Fungsi Akhir
Fungsi Base64decode (sebagai Isi)
'Konversi string yang disandikan Base64 ke string yang disandikan Ansi
'asContents juga harus berupa string yang dikodekan ANSI (string biner juga dapat diterima)
Redupkan Hasil
Redupkan Posisi
Redupkan lsGroup64, lsGroupBinary
Redupkan Char1, Char2, Char3, Char4
Redupkan Byte1, Byte2, Byte3
Redupkan M4,len1,len2
len1= Lenb(sebagaiIsi)
M4 = len1 Mod 4
jika len1 < 1 atau M4 > 0 maka
'Panjang string harus kelipatan 4
Dekode Base64 = ""
keluar Fungsi
end if
'Nilai apakah digit terakhirnya = tanda
'Tentukan apakah angka kedua dari belakang adalah tanda =
'Di sini m4 mewakili jumlah karakter terakhir yang perlu diproses secara terpisah
jika midb(asContents, len1, 1) = chrb(61) maka m4=3
jika midb(asContents, len1-1, 1) = chrb(61) maka m4=2
jika m4 = 0 maka
len2=len1
kalau tidak
len2=len1-4
berakhir jika
Untuk lnPosition = 1 Ke Len2 Langkah 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 Dan 48) 16) Atau (Char1 * 4) Dan &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 Dan 60) 4) Atau (Char2 * 16) Dan &HFF)
Byte3 = Chrb((((Char3 Dan 3) * 64) Dan &HFF) Atau (Char4 Dan 63))
lsGroupBinary = Byte1 & Byte2 & Byte3
lsResult = lsResult & lsGroupBinary
Berikutnya
'Proses beberapa karakter terakhir yang tersisa
jika M4 > 0 maka
lsGrupBinary = ""
lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65) 'chr(65)=A, dikonversi ke nilai 0
jika M4=2 maka 'Tambahkan 4 digit untuk memudahkan perhitungan
lsGroup64 = lsGroup64 & chrB(65)
berakhir jika
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 Dan 48) 16) Atau (Char1 * 4) Dan &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 Dan 60) 4) Atau (Char2 * 16) Dan &HFF)
Byte3 = Chrb((((Char3 Dan 3) * 64) Dan &HFF) Atau (Char4 Dan 63))
jika M4=2 maka
lsGroupBinary = Byte1
elseif M4=3 maka
lsGroupBinary = Byte1 & Byte2
berakhir jika
lsResult = lsResult & lsGroupBinary
berakhir jika
Base64decode = lsResult
Fungsi Akhir