查看: 52  |  回复: 0
  VB6 Base64编解码加解密 模块 modToolsBase64.bas
楼主
发表于 2025年5月26日 15:19

新建From1(窗体),新建Command1(按钮CommandButton),代码:

Private Sub Command1_Click()
    Debug.Print modToolsBase64.Encode("码农库")
    Debug.Print modToolsBase64.Decode("wuvFqb/i")
End Sub

modToolsBase64.bas,代码:

Option Explicit

' Base64编码表
Private Const BASE64_TABLE As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

' Base64编码函数
Public Function Encode(ByVal Data As String) As String
    Dim i As Long
    Dim j As Long
    Dim ByteArray() As Byte
    Dim Result As String
    Dim Temp As Long
    Dim GroupCount As Long
    
    ' 将字符串转换为字节数组
    ByteArray = StrConv(Data, vbFromUnicode)
    
    ' 计算需要多少个4字节组
    GroupCount = (UBound(ByteArray) + 1) \ 3
    If (UBound(ByteArray) + 1) Mod 3 <> 0 Then GroupCount = GroupCount + 1
    
    ' 初始化结果字符串
    Result = String(GroupCount * 4, "=")
    
    ' 处理每个3字节组
    For i = 0 To GroupCount - 1
        ' 获取3个字节(不足的补0)
        Temp = 0
        For j = 0 To 2
            If i * 3 + j <= UBound(ByteArray) Then
                Temp = Temp Or (ByteArray(i * 3 + j) * (256 ^ (2 - j)))
            End If
        Next j
        
        ' 转换为4个Base64字符
        For j = 0 To 3
            If i * 4 + j < Len(Result) Then
                Mid$(Result, i * 4 + j + 1, 1) = Mid$(BASE64_TABLE, ((Temp \ (64 ^ (3 - j))) And 63) + 1, 1)
            End If
        Next j
    Next i
    
    Encode = Result
End Function

' Base64解码函数
Public Function Decode(ByVal Data As String) As String
    Dim i As Long
    Dim j As Long
    Dim ByteArray() As Byte
    Dim Result As String
    Dim Temp As Long
    Dim GroupCount As Long
    Dim CharValue As Long
    
    ' 去除无效字符
    Data = Replace(Data, vbCr, "")
    Data = Replace(Data, vbLf, "")
    Data = Replace(Data, vbTab, "")
    Data = Replace(Data, " ", "")
    
    ' 计算需要多少个3字节组
    GroupCount = Len(Data) \ 4
    
    ' 初始化字节数组
    ReDim ByteArray(GroupCount * 3 - 1)
    
    ' 处理每个4字符组
    For i = 0 To GroupCount - 1
        Temp = 0
        
        ' 获取4个Base64字符的值
        For j = 0 To 3
            CharValue = InStr(1, BASE64_TABLE, Mid$(Data, i * 4 + j + 1, 1)) - 1
            If CharValue < 0 Then CharValue = 0                                 ' 处理填充字符'='
            Temp = Temp Or (CharValue * (64 ^ (3 - j)))
        Next j
        
        ' 转换为3个字节
        For j = 0 To 2
            If i * 3 + j <= UBound(ByteArray) Then
                ByteArray(i * 3 + j) = (Temp \ (256 ^ (2 - j))) And 255
            End If
        Next j
    Next i
    
    ' 将字节数组转换为字符串
    Result = StrConv(ByteArray, vbUnicode)
    
    ' 去除可能的空字符
    If InStr(Result, vbNullChar) > 0 Then
        Result = Left$(Result, InStr(Result, vbNullChar) - 1)
    End If
    
    Decode = Result
End Function

运行结果:

wuvFqb/i
码农库


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2025 MaNongKu.com