Base 64 encoding is a method of passing binary data between systems that normally only accept "typeable" characters e.g. binary attachments to emails etc.
It also provides a good method of obfuscating sensitive data although it is not encryption (it is easily decoded without a key).
B64Enc$() returns a Base64 encoded version of the original input string.
Note: B64 encoded strings have a, roughly, 33% increase in size over the original.
B64Dec$() decodes a Base64 string back to its original data.
Syntax:
a$=B64Enc$(expression)
b$=B64Dec$(expression)
Example:
a$=B64Enc$(plain_text_password$)
my_jpeg$=B64Dec$(email_attachment$)
Assumptions:
OPTION BASE 0
CONST Mime$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Code:
FUNCTION B64Enc$(x$)
LOCAL INTEGER c1,c2,c3,w1,w2,w3,w4,n
LOCAL STRING so$
FOR n=1 TO LEN(x$) STEP 3
c1=ASC(MID$(x$,n,1)): c2=ASC(MID$(x$,n+1,1)+CHR$(0)): c3=ASC(MID$(x$,n+2,1)+CHR$(0)): w1=INT(c1/4): w2=(c1 AND 3)*16+INT(c2/16)
IF LEN(x$)>=n+1 THEN w3=(c2 AND 15)*4+INT(c3/64) ELSE w3=-1
IF LEN(x$)>=n+2 THEN w4=c3 AND 63 ELSE w4=-1
so$=so$+ME$(w1)+ME$(w2)+ME$(w3)+ME$(w4)
NEXT
B64Enc$=so$+"=="
END FUNCTION
FUNCTION B64Dec$(x$)
LOCAL INTEGER w1,w2,w3,w4,n
LOCAL STRING so$
FOR n=1 TO LEN(x$) STEP 4
w1=MD(MID$(x$,n,1)): w2=MD(MID$(x$,n+1,1)): w3=MD(MID$(x$,n+2,1)): w4=MD(MID$(x$,n+3,1))
IF w2>=0 THEN so$=so$+CHR$(((w1*4+INT(w2/16)) AND 255))
IF w3>=0 THEN so$=so$+CHR$(((w2*16+INT(w3/4)) AND 255))
IF w4>=0 THEN so$=so$+CHR$(((w3*64+w4) AND 255))
NEXT
B64Dec$=so$
END FUNCTION
' support functions
FUNCTION ME$(i)
IF i>=0 THEN ME$=MID$(Mime$,i+1, 1) ELSE ME$=""
END FUNCTION
FUNCTION MD(x$)
IF LEN(x$)=0 THEN MD=-1 ELSE MD=INSTR(Mime$,x$)-1
END FUNCTION