VB下的BASE64编码类模块
这个VB类模块可以用来计算字节数组、字符串、文件的BASE64编码及解码。明晨网络Mingchennet.com收集整理,其中的InitBase函数用来初始化编码字典,默认使用标准字典,如果自行指定,可以实现一定程度上的加密及解密。
- '========================================
- '模块名称:Base64
- '模块说明:本模块用来实现Base64字符串、二进制数据的编码解码
- '最后更新: 明晨网络 www.MingchenNet.com 2009-05-31 21:57
- '========================================
- Option Explicit
- Dim Base64Chr As String
- Dim NullChr As String
- Dim psBase64Chr(0 To 63) As String
- Function InitBase(ByVal Base64Chr As String)
- '如果没有提供字符串则按照标准编码
- If Base64Chr = "" Then Base64Chr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
- Dim iPtr As Integer
- '初始化 BASE64数组
- For iPtr = 0 To 63
- psBase64Chr(iPtr) = Mid$(Base64Chr, iPtr + 1, 1)
- Next
- NullChr = Right(Base64Chr, 1)
- End Function
- '从一个经过Base64的字符串中解码到源字符串
- Function DecodeBase64String(str2Decode As String) As String
- DecodeBase64String = StrConv(DecodeBase64Byte(str2Decode), vbUnicode)
- End Function
- '从一个经过Base64的字符串中解码到源字节数组
- Function DecodeBase64Byte(str2Decode As String) As Byte()
- Dim lPtr As Long
- Dim iValue As Integer
- Dim iLen As Integer
- Dim iCtr As Integer
- Dim Bits(1 To 4) As Byte
- Dim strDecode As String
- Dim Str As String
- Dim Output() As Byte
- Dim iIndex As Long
- Dim lFrom As Long
- Dim lTo As Long
- '//除去回车
- Str = Replace(str2Decode, vbCrLf, "")
- '//每4个字符一组(4个字符表示3个字)
- For lPtr = 1 To Len(Str) Step 4
- iLen = 4
- For iCtr = 0 To 3
- '//查找字符在BASE64字符串中的位置
- iValue = InStr(1, Base64Chr, Mid$(Str, lPtr + iCtr, 1), vbBinaryCompare)
- Select Case iValue 'A~Za~z0~9+/
- Case 1 To 64:
- Bits(iCtr + 1) = iValue - 1
- Case 65 '=
- iLen = iCtr
- Exit For
- '//没有发现
- Case 0: Exit Function
- End Select
- Next
- '//转换4个6比特数成为3个8比特数
- Bits(1) = Bits(1) * &H4 + (Bits(2) And &H30) &H10
- Bits(2) = (Bits(2) And &HF) * &H10 + (Bits(3) And &H3C) &H4
- Bits(3) = (Bits(3) And &H3) * &H40 + Bits(4)
- '//计算数组的起始位置
- lFrom = lTo
- lTo = lTo + (iLen - 1) - 1
- '//重新定义输出数组
- ReDim Preserve Output(0 To lTo)
- For iIndex = lFrom To lTo
- Output(iIndex) = Bits(iIndex - lFrom + 1)
- Next
- lTo = lTo + 1
- Next
- DecodeBase64Byte = Output
- End Function
- '将一个字节数组进行Base64编码,并返回字符串
- Function EncodeBase64Byte(sValue() As Byte) As String
- Dim lCtr As Long
- Dim lPtr As Long
- Dim lLen As Long
- Dim sEncoded As String
- Dim Bits8(1 To 3) As Byte
- Dim Bits6(1 To 4) As Byte
- Dim i As Integer
- For lCtr = 1 To UBound(sValue) + 1 Step 3
- For i = 1 To 3
- If lCtr + i - 2 <= UBound(sValue) Then
- Bits8(i) = sValue(lCtr + i - 2)
- lLen = 3
- Else
- Bits8(i) = 0
- lLen = lLen - 1
- End If
- Next
- '//转换字符串为数组,然后转换为4个6位(0-63)
- Bits6(1) = (Bits8(1) And &HFC) 4
- Bits6(2) = (Bits8(1) And &H3) * &H10 + (Bits8(2) And &HF0) &H10
- Bits6(3) = (Bits8(2) And &HF) * 4 + (Bits8(3) And &HC0) &H40
- Bits6(4) = Bits8(3) And &H3F
- '//添加4个新字符
- For lPtr = 1 To lLen + 1
- sEncoded = sEncoded & psBase64Chr(Bits6(lPtr))
- Next
- Next
- '//不足4位,以=填充
- Select Case lLen + 1
- Case 2: sEncoded = sEncoded & NullChr & NullChr
- Case 3: sEncoded = sEncoded & NullChr
- Case 4:
- End Select
- EncodeBase64Byte = sEncoded
- End Function
- '对字符串进行Base64编码并返回字符串
- Function EncodeBase64String(str2Encode As String) As String
- Dim sValue() As Byte
- sValue = StrConv(str2Encode, vbFromUnicode)
- EncodeBase64String = EncodeBase64Byte(sValue)
- End Function
- '对文件进行Base64编码并返回编码后的Base64字符串
- Function EncodFileToBase64String(strFileSource As String)
- Dim lpdata() As Byte, i As Long, n As Long
- i = FreeFile
- Open strFileSource For Binary Access Read Lock Write As i
- n = LOF(i) - 1
- ReDim lpdata(0 To n)
- Get i, , lpdata
- Close i
- EncodFileToBase64String = EncodeBase64Byte(lpdata)
- End Function
- '将一个Base64字符串解码,并写入二进制文件
- Function DecodeBase64StringToFile(strBase64 As String, strFilePath As String)
- Dim i As Integer
- i = FreeFile
- Open strFilePath For Binary Access Write As i
- Put i, , DecodeBase64Byte(strBase64)
- Close i
- End Function
- Private Sub Class_initialize()
- InitBase ""
- End Sub
文章源自:明晨网络,admin,《VB下的BASE64编码类模块》,http://www.mingchennet.com/tec/code/vb/24.htm
- 上一篇:VB下的MD5编码类
- 下一篇:VB代码:获取实例的完整镜像路径