Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'http://www.webtoolkit.info/javascript_base64.html#.YSOruI6A6Uk
- 'https://humanwhocodes.com/blog/2009/12/08/computer-science-in-javascript-base64-encoding/
- Imports System.Text
- Imports System.Text.RegularExpressions
- Public Class Base64
- 'Private Property
- Const _keyStr As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
- ' public method for encoding
- Public Function Encode(input As String, isBinaryData As Boolean) As String
- If String.IsNullOrEmpty(input) Then Return ""
- Dim output As New StringBuilder
- Dim cur, prev, byteNum As Double
- Dim i As Integer = 0
- If Not isBinaryData Then input = _utf8_encode(input)
- While i < input.Length
- cur = AscW(input(i)) 'charCodeAt
- byteNum = i Mod 3
- Select Case byteNum
- Case 0
- output.Append(_keyStr(cur >> 2)) 'charAt
- Case 1
- output.Append(_keyStr(((prev And 3) << 4) Or (cur >> 4)))
- Case 2
- output.Append(_keyStr(((prev And 15) << 2) Or (cur >> 6)))
- output.Append(_keyStr(cur And 63))
- End Select
- prev = cur
- i += 1
- End While
- If byteNum = 0 Then
- output.Append(_keyStr((prev And 3) << 4))
- output.Append("==")
- ElseIf byteNum = 1 Then
- output.Append(_keyStr((prev And 15) << 2))
- output.Append("=")
- End If
- Return output.ToString
- End Function
- ' public method for decoding
- Public Function Decode(input As String, isBinaryData As Boolean) As String
- If String.IsNullOrEmpty(input) Then Return ""
- Dim output As New StringBuilder
- Dim cur, prev, digitNum As Double
- Dim i As Integer = 0
- input = input.Replace("=", "")
- While i < input.Length
- cur = _keyStr.IndexOf(input(i))
- digitNum = i Mod 4
- Select Case digitNum
- Case 1
- output.Append(ChrW((prev << 2) Or (cur >> 4)))
- Case 2
- output.Append(ChrW(((prev And 15) << 4) Or (cur >> 2)))
- Case 3
- output.Append(ChrW(((prev And 3) << 6) Or cur))
- End Select
- prev = cur
- i += 1
- End While
- If Not isBinaryData Then
- Return _utf8_decode(output.ToString)
- Else
- Return output.ToString
- End If
- End Function
- ' private method for UTF-8 encoding
- Private Function _utf8_encode(_string As String) As String
- _string = Regex.Replace(_string, "/\r\n/g", "\n")
- Dim utftext As String = ""
- For n = 0 To _string.Length - 1
- Dim c As Integer = AscW(_string(n))
- If c < 128 Then
- utftext &= ChrW(c)
- ElseIf (c > 127) AndAlso (c < 2048) Then
- utftext &= ChrW((c >> 6) Or 192)
- utftext &= ChrW((c And 63) Or 128)
- Else
- utftext &= ChrW((c >> 12) Or 224)
- utftext &= ChrW(((c >> 6) And 63) Or 128)
- utftext &= ChrW((c And 63) Or 128)
- End If
- Next
- Return utftext
- End Function
- ' private method for UTF-8 decoding
- Private Function _utf8_decode(utftext As String)
- Dim _String As String = ""
- Dim i As Integer = 0
- Dim c, c3, c2 As Integer
- While (i < utftext.Length)
- c = AscW(utftext(i))
- If (c < 128) Then
- _String &= ChrW(c)
- i += 1
- ElseIf ((c > 191) And (c < 224)) Then
- c2 = AscW(utftext(i + 1))
- _String &= ChrW(((c And 31) << 6) Or (c2 And 63))
- i += 2
- Else
- c2 = AscW(utftext(i + 1))
- c3 = AscW(utftext(i + 2))
- _String &= ChrW(((c And 15) << 12) Or ((c2 And 63) << 6) Or (c3 And 63))
- i += 3
- End If
- End While
- Return _String
- End Function
- End Class
Add Comment
Please, Sign In to add comment