|
This article contains a full VBS source code of a Base64 decode function (base64 decoder). You can use the function, for example, to decode basic http authentication info - username and password, or to decode incomming emails.
Base64Decode VBS
function can only work with small amount of data - VBS does
not enable to work with buffers to improve performance. Consumed processor time rapidly
grows with source data length (by square). Please use Base64 property of
ByteArray object (ScriptUtilities library, C++ COM object, comercial) if you want to work
with large data. ByteArray lets you also work with codepage (charset) conversions and provides binary file access and binary-to-string conversion.
ScriptUtilities is also available with source code.
See also:
Base64 encode VBS function - reverse encoding function.
Online Base64 decoder and encoder - realtime http sample to encode/decode Base64 texts and binary files.
Online Base16 (hex string) decoder and encoder - similar sample for hexstring (samples for SQL command with binary and image fields)
Next table contains consumed processor time of this VBS code (Base64Encode) and C++ (Base64) on Duron 700 processor. You can see that VBS function is usable for maximum of 50-100 kB.
Source size [B]
| Procesor time [ms], Encode |
Procesor time [ms], Decode |
VBS
| C++ Base64
| VBS
| C++ Base64
|
100 B |
2.2 |
0.04 |
2.3 |
0.03 |
1 kB |
22 |
0.06 |
23 |
0.10 |
5 kB |
116 |
0.20 |
120 |
0.42 |
10 kB |
248 |
0.37 |
255 |
0.82 |
20 kB |
855 |
1.00 |
744 |
1.90 |
50 kB |
6.6 s |
0.003 s |
6.4 s |
0.004 s |
100 kB |
36 s |
0.006 s |
24 s |
0.010 s |
500 kB |
~1000 s |
0.032 s |
~700 s |
0.050 s |
1 MB |
~5000 s |
0.068 s |
~3500 s |
0.110 s |
' Decodes a base-64 encoded string (BSTR type).
' 1999 - 2004 Antonin Foller, http://www.motobit.com
' 1.01 - solves problem with Access And 'Compare Database' (InStr)
Function Base64Decode(ByVal base64String)
'rfc1521
'1999 Antonin Foller, Motobit Software, http://Motobit.cz
Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim dataLength, sOut, groupBegin
'remove white spaces, If any
base64String = Replace(base64String, vbCrLf, "")
base64String = Replace(base64String, vbTab, "")
base64String = Replace(base64String, " ", "")
'The source must consists from groups with Len of 4 chars
dataLength = Len(base64String)
If dataLength Mod 4 <> 0 Then
Err.Raise 1, "Base64Decode", "Bad Base64 string."
Exit Function
End If
' Now decode each group:
For groupBegin = 1 To dataLength Step 4
Dim numDataBytes, CharCounter, thisChar, thisData, nGroup, pOut
' Each data group encodes up To 3 actual bytes.
numDataBytes = 3
nGroup = 0
For CharCounter = 0 To 3
' Convert each character into 6 bits of data, And add it To
' an integer For temporary storage. If a character is a '=', there
' is one fewer data byte. (There can only be a maximum of 2 '=' In
' the whole string.)
thisChar = Mid(base64String, groupBegin + CharCounter, 1)
If thisChar = "=" Then
numDataBytes = numDataBytes - 1
thisData = 0
Else
thisData = InStr(1, Base64, thisChar, vbBinaryCompare) - 1
End If
If thisData = -1 Then
Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
Exit Function
End If
nGroup = 64 * nGroup + thisData
Next
'Hex splits the long To 6 groups with 4 bits
nGroup = Hex(nGroup)
'Add leading zeros
nGroup = String(6 - Len(nGroup), "0") & nGroup
'Convert the 3 byte hex integer (6 chars) To 3 characters
pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
Chr(CByte("&H" & Mid(nGroup, 5, 2)))
'add numDataBytes characters To out string
sOut = sOut & Left(pOut, numDataBytes)
Next
Base64Decode = sOut
End Function
|
Next sample is a simple ASP page, which does not enable anonymous users (without username and password), but users with any username and any password are alowed.
<%
Dim UID, PWD
GetUser UID, PWD
If UID = "" Then
'or If Not HasAccess(UID, PWD) Then
Response.Status = "401 Access Denied"
Response.Write "Some page with info about user names And registration"
End If
Sub GetUser(LOGON_USER, LOGON_PASSWORD)
Dim UP, Pos, Auth
Auth = Request.ServerVariables("HTTP_AUTHORIZATION")
LOGON_USER = ""
LOGON_PASSWORD = ""
If LCase(Left(Auth, 5)) = "basic" Then
UP = Base64Decode(Mid(Auth, 7))
Pos = InStr(UP, ":")
If Pos > 1 Then
LOGON_USER = Left(UP, Pos - 1)
LOGON_PASSWORD = Mid(UP, Pos + 1)
End If
End If
End Sub
%>
|
There is no good idea to allow access with any username/password. But you can write your own function which lets you authenticate usernames/passwords against database.
Copyright and use this code
The source code on this page and other samples at https://www.motobit.com/tips/
are a free code, you can use it as you want: copy it, modify it, use it in your products, ...
If you use this code, please:
1. Leave the author note in the source.
or
2. Link this sample from you page.
<A
Href="https://www.motobit.com/tips/detpg_Base64/"
Title="Source of VBS (ASP) function that
enables decode base64 encoded strings."
>Base64 decode VBS function (vb decoder algorithm), source code</A>
|