谁有BASE64编码的VB源码
Private Const sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Base64 解码 "" 表示失败
Public Function fun_Base64Decode(ByVal str_Source As String) As String
Dim str_Result As String
Dim str_Temp As String
Dim str_Bin(1 To 3) As String
Dim int_I As Integer
Dim int_Len As Integer
Dim int_Pos(1 To 4) As Integer
Dim int_J As Integer
int_Len = Len(str_Source)
长度不是4的倍数,用空格填充
If int_Len Mod 4 <> 0 Then
str_Source = str_Source & String(4 - (int_Len Mod 4), Chr(32))
int_Len = Len(str_Source)
End If
For int_I = 1 To int_Len Step 4 每次取4个字符
str_Temp = Mid$(str_Source, int_I, 4)
找出每个字符在常量里的位置
For int_J = 1 To 4
int_Pos(int_J) = InStr(1, sBASE_64_CHARACTERS, Mid$(str_Temp, int_J, 1)) - 1
If int_Pos(int_J) >= 64 Or int_Pos(int_J) < 0 Then fun_Base64Decode = "": Exit Function
Next int_J
把int_Pos的各个数值转换为二进制,表示为6位,因为它的值在0到63之间,所以一共有4*6=24位
每次取出8位,转换为一个字符,所以可以转换为24/8=3个字符
str_Bin(1) = Chr(int_Pos(1) * 4 + (int_Pos(2) And &H30) \ 16)
str_Bin(2) = Chr((int_Pos(2) And &HF) * 16 + (int_Pos(3) And &H3C) \ 4)
str_Bin(3) = Chr((int_Pos(3) And &H3) * 64 + int_Pos(4))
str_Temp = str_Bin(1) & str_Bin(2) & str_Bin(3)
str_Result = str_Result & str_Temp
Next int_I
fun_Base64Decode = Trim(str_Result)
End Function
Base64 编码 ""表示失败
Public Function fun_Base64Encode(ByVal str_Source As String) As String
Dim int_I As Integer
Dim int_J As Integer
Dim str_Result As String
Dim int_Pos(1 To 4) As Integer
Dim int_Bin(1 To 3) As Integer
Dim str_Temp As String
Dim int_Len As Integer
int_Len = Len(str_Source)
长度不是3的倍数,用空格填充
If int_Len Mod 3 <> 0 Then
str_Source = str_Source & String(3 - (int_Len Mod 3), Chr(32))
int_Len = Len(str_Source)
End If
For int_I = 1 To int_Len Step 3 每次取3个字符
str_Temp = Mid$(str_Source, int_I, 3)
计算每个字符的ASCII值
For int_J = 1 To 3
int_Bin(int_J) = Asc(Mid$(str_Temp, int_J, 1))
Next int_J
每个字符以8位表示,所以一共为8*3=24位
每次取出6位,所以一共可取24/6=4次
int_Pos(1) = (int_Bin(1) And &HFC) \ 4
int_Pos(2) = (int_Bin(1) And &H3) * 16 + (int_Bin(2) And &HF0) \ 16
int_Pos(3) = (int_Bin(2) And &HF) * 4 + (int_Bin(3) And &HC0) \ 64
int_Pos(4) = int_Bin(3) And &H3F
str_Temp = ""
在常量表达式中取出这4个数值所在位置的字符
For int_J = 1 To 4
If int_Pos(int_J) > 63 Or int_Pos(int_J) < 0 Then fun_Base64Encode = "": Exit Function
str_Temp = str_Temp & Mid$(sBASE_64_CHARACTERS, int_Pos(int_J) + 1, 1)
Next int_J
str_Result = str_Result & str_Temp
Next int_I
fun_Base64Encode = str_Result
End Function