'Author: Shannon D Larratt 'Source: http://www.powerbasic.com/support/forums/Forum5/HTML/000403.html ' FUNCTION Encode64(InputStr AS STRING) AS STRING DIM State AS INTEGER DIM i AS INTEGER DIM Base64(0 TO 63) AS STRING DIM current AS INTEGER DIM old AS INTEGER DIM first_new AS STRING DIM second_new AS STRING DIM OUTPUTer AS STRING FOR r=0 TO 63 Base64(r) = READ$(r+1) NEXT DATA "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M" DATA "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" DATA "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m" DATA "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" DATA "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/" FOR i = 1 TO LEN(InputStr) State = State + 1 SELECT CASE State CASE 1 current = ASC(MID$(InputStr, i, 1)) first_new = Base64((INT(current / 4) AND &H3F)) OUTPUTer = OUTPUTer & first_new CASE 2 current = ASC(MID$(InputStr, i, 1)) first_new = Base64((((old * 16) AND &H30) OR ((INT(current / 16) AND &HF)))) OUTPUTer = OUTPUTer & first_new CASE 3: current = ASC(MID$(InputStr, i, 1)) first_new = Base64((((old * 4) AND &H3C) OR ((INT(current / 64) AND &H3)))) second_new = Base64((current AND &H3F)) OUTPUTer = OUTPUTer & first_new & second_new State = 0 END SELECT old = current NEXT SELECT CASE State CASE 1 first_new = Base64(((old * 16) AND &H30)) OUTPUTer = OUTPUTer & first_new & "==" CASE 2 first_new = Base64(((old * 4) AND &H3C)) OUTPUTer = OUTPUTer & first_new & "=" END SELECT Encode64 = OUTPUTer END FUNCTION FUNCTION Decode64(InputStr AS STRING) AS STRING DIM x AS INTEGER DIM y AS INTEGER DIM OUTPUTer AS STRING DIM Base64(0 TO 63) AS STRING DIM Found AS INTEGER DIM g AS INTEGER DIM Group AS LONG FOR r=0 TO 63 Base64(r) = READ$(r+1) NEXT DATA "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M" DATA "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" DATA "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m" DATA "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" DATA "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/" g = 18 FOR x = 1 TO LEN(InputStr) current_char = ASC(MID$(InputStr, x, 1)) Found = 0 FOR y = 0 TO 63 IF Base64(y) = CHR$(current_char) THEN Found = 1 EXIT FOR END IF NEXT IF Found = 1 THEN Group = (Group OR (y * (2 ^ g))) END IF g = g - 6 IF g < 0 THEN outputer = outputer & CHR$(INT((Group AND 16711680) / (65536))) outputer = outputer & CHR$(INT((Group AND 65280) / (256))) outputer = outputer & CHR$(Group AND 255) Group = 0 g = 18 END IF NEXT Decode64 = outputer EXIT FUNCTION END FUNCTION