博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Base64加密算法

Posted on 2008-10-27 14:33  佟艿芙  阅读(2160)  评论(0)    收藏  举报
Public Function ufmBase64_Encode(bstrSource) As String
    Const BASE64_TABLE As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    Dim strTempLine As String
    Dim j As Integer
    If bstrSource = "" Then
        bstrSource = " "
    End If
    For j = 1 To (Len(bstrSource) - Len(bstrSource) Mod 3) Step 3
        strTempLine = strTempLine + Mid(BASE64_TABLE, (asc(Mid(bstrSource, j, 1)) \ 4) + 1, 1)
        strTempLine = strTempLine + Mid(BASE64_TABLE, ((asc(Mid(bstrSource, j, 1)) Mod 4) * 16 _
                      + asc(Mid(bstrSource, j + 1, 1)) \ 16) + 1, 1)
        strTempLine = strTempLine + Mid(BASE64_TABLE, ((asc(Mid(bstrSource, j + 1, 1)) Mod 16) * 4 _
                      + asc(Mid(bstrSource, j + 2, 1)) \ 64) + 1, 1)
        strTempLine = strTempLine + Mid(BASE64_TABLE, (asc(Mid(bstrSource, j + 2, 1)) Mod 64) + 1, 1)
    Next j
    If Not (Len(bstrSource) Mod 3) = 0 Then
         If (Len(bstrSource) Mod 3) = 2 Then
            strTempLine = strTempLine + Mid(BASE64_TABLE, (asc(Mid(bstrSource, j, 1)) \ 4) + 1, 1)
            strTempLine = strTempLine + Mid(BASE64_TABLE, (asc(Mid(bstrSource, j, 1)) Mod 4) * 16 _
                      + asc(Mid(bstrSource, j + 1, 1)) \ 16 + 1, 1)
             strTempLine = strTempLine + Mid(BASE64_TABLE, (asc(Mid(bstrSource, j + 1, 1)) Mod 16) * 4 + 1, 1)
            strTempLine = strTempLine & "="
        ElseIf (Len(bstrSource) Mod 3) = 1 Then
            strTempLine = strTempLine + Mid(BASE64_TABLE, asc(Mid(bstrSource, j, 1)) \ 4 + 1, 1)
            strTempLine = strTempLine + Mid(BASE64_TABLE, (asc(Mid(bstrSource, j, 1)) Mod 4) * 16 + 1, 1)
             strTempLine = strTempLine & "=="
        End If
     End If
    ufmBase64_Encode = strTempLine
End Function