Base64 encoding and decoding

xiaoxiao2021-03-06  24

The encoding code is changed in a piece of code written by others.

'Encrypting the input byte, so you can encrypt the secondary file, and return a string of a BA64.

Function B64E (InData () as Byte) AS String

ON Error ResMe next

Const base64 = "Abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 /"

DIM UB as long, LB as long 'array upper limit and lower limit

DIM Sout, Cout, I

DIM NGROUP AS Long

DIM Pout, SGROUP

Ub = ubound (inData)

Dim Second as Byte

Dim thrid as byte

lb = lbound (inData)

IF Err.Number <> 0 THEN

B64E = ""

EXIT FUNCTION

END IF

For i = lb to UB Step 3

IF i 1> ub then

SECOND = 0

Thrid = 0

Elseif i 2> ub kil

SECOND = Indata (i 1)

Thrid = 0

Else

SECOND = Indata (i 1)

Thrid = Indata (i 2)

END IF

NGroup = & h10000 * indata (i) & h100 * second thrid

sgroup = Oct (ngroup)

SGROUP = String (8 - len (sgroup), "0") SGROUP

Pout = MID (Base64, CLNG ("& O" MID (SGROUP, 1, 2)) 1, 1) MID (Base64, ClNG ("& O" MID (SGROUP, 3, 2)) 1, 1 ) MID (Base64, CLNG ("& O" MID (SGROUP, 5, 2)) 1, 1) MID (Base64, ClNG ("& O" MID (SGROUP, 7, 2)) 1, 1 )

Sout = SOUT POUT

IF (i 2) MOD 57 = 0 THEN SOUT = SOUT VBCRLF

ngroup = 0

Next i

SELECT CASE (UB - LB 1) MOD 3

Case 1

Sout = Left (Sout, Len (Sout) - 2) "=="

Case 2

Sout = Left (Sout, Len (Sout) - 1) "="

End selectb64e = sout

END FUNCTION

'Return is also a one-piece array

Public Function B64U (Byval Indata As String, Outdata () AS BYTE AS BOOLEAN

ON Error Goto Errhandle

Const base64 = "Abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 /"

DIM UB as long, LB as long 'array upper limit and lower limit

DIM Sout, Cout, I

DIM NGROUP AS Long

DIM Pout, SGROUP

Indata = Replace (InData, VBCRLF, ")

Redim Outdata (0 to (Int (INDATA) / 4) 1) * 3 - 1) AS BYTE

For i = 1 to (Len (Indata) - Len (Indata) MOD 4) Step 4

ngroup = & O1000000 * (INSTR (Base64, MID (INDATA, I, 1)) - 1) & O10000 * (INDATA, I 1, 1)) - 1) _ _

& O100 * (IIF (IIF (Base64, MID (INDATA, I 2, 1)) = 0, 1, INSTR (Base64, MID (INDATA, I 2, 1))) - 1) _

(IIF (IIF (Base64, MID (INDATA, I 3, 1)) = 0, 1, INSTR (Base64, MID (INDATA, I 3, 1)) - 1)

SGroup = trim (HEX (ngroup) 'is transferred to 16

SGroup = String (6 - len (sgroup), "0") & sgroup 'If not enough, use 0 to make up

Outdata (INT (I / 4) * 3) = VAL ("& H" & MID (SGROUP, 1, 2))

Outdata (int (I / 4) * 3 1) = VAL ("& H" & MID (SGROUP, 3, 2))

Outdata (int (I / 4) * 3 2) = VAL ("& H" & MID (SGROUP, 5, 2))

Next i

Select Case Len (Indata) - Len (Replace (INDATA, "=", ""))

Case 1

Redim Preserve Outdata (0 To (INTATA) / 4) 1) * 3 - 2) AS Bytecase 2

Redim Preserve Outdata (0 to (INDATA) / 4) 1) * 3 - 3) AS BYTE

End SELECT

B64U = true

EXIT FUNCTION

Errhandle:

B64U = false

END FUNCTION

'This code can encrypt binary data, no problem like image files,

Call method:

Private submmand1_click ()

DIM arrstr () as byte

Arrstr = strconv (text1.text, vbfromunicode)

Text2.text = b64e (arrstr)

End Sub

Private sub fascist2_click ()

Dim outdata () as Byte

IF B64U (Text2.Text, Outdata) = True Then

Text1.text = cstr (Outdata)

END IF

End Sub

转载请注明原文地址:https://www.9cbs.com/read-66197.html

New Post(0)