User Tools

Site Tools


encoding_20text_20into_20base64

Encoding Text into Base64

Encoding Text into Base64

It can be useful to encode a text string into a base 64 representation. For example when passing usernames and passwords to an SMTP server the request and response are both done using base 64.
The encoding is done by taking 3 ASCII values to form a 24bit binary value end then splitting this into 6 bit chunks starting from the left hand side. If there are less then 3 characters at the end then we pad out with zeroes and add one or 2 == signs to the end of the Base64 string

        REM Base 64 Endode and Decode
        INPUT "Enter String to be encoded:" input$
        A$ = FNEncode64(input$)
        PRINT A$
        B$=FNDecode64(A$)
        PRINT B$
        END

The program uses the following Function to encode the input string and return the Base64 Encoded Text

        REM Function to Encode a string into Base64
        DEF FNEncode64(text$)
        enc$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
        REM Get length of input string
        len=LEN(text$)
        output$=""
        count1 = 1
        WHILE (count1 <= len)
          in%=0 REM This will hold up to 3 input characters as an integer
          count2=0
          REM Get next 3 characters - or however many remains in the string as appropriate
          REPEAT
            in%=in% << 8 REM Shift bits 8 places to the left (same as multiplying by 256)
            in%=in%+ASC(MID$(text$,(count1+count2),1)) REM Add ASCII Value of Character
            count2 += 1
          UNTIL(count2=3 OR ((count1+count2)>len))
          in%=in%<<(8*(3-count2)) REM Pad with zeroes if we have less than 3 bytes to make a 24 bit number
          FOR n=1 TO 4
            output$+= MID$(enc$, (in%>>18)+1,1)
            in% = (in% << 6) AND  &FFFFFF REM move next 6 binary digits into position
          NEXT n
          IF (count2=1) THEN RIGHT$(output$,2)="==" ELSEIF (count2=2) THEN RIGHT$(output$)="="
          count1 += 3
        ENDWHILE
        =output$



And also this function to Decode a Base64 string back to a standard ASCII String

        REM Function to decode a Base64 string into ASCII
        DEF FNDecode64(B64$)
        enc$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
        output$=""
        padding=0
        len=LEN B64$
        REM because of the padding character = at the end of the encoded text, the base 64 string length will always be a multiple of 4
        FOR pos=1 TO len STEP 4
          in%=0
          REM Get the next 4 Characters and convert to a 24 bit number
          FOR pos2=0 TO 3
            out%=0
            in%=in%<<6
            IF MID$(B64$,pos+pos2,1)="=" THEN
              padding=padding+1
            ELSE
              out%=INSTR(enc$, MID$(B64$,pos+pos2,1))-1
              in%=in%+out%
            ENDIF
          NEXT
          REM Now we have a 24 bit value we break it down into up to 3 8 bit chunks
          FOR n = 1 TO (3-padding)
            out%=in% >>16
            output$=output$+CHR$(out%)
            in%=(in%<<8) AND &FFFFFF REM Shift next 8 bits into position
          NEXT
        NEXT
 
        =output$
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
encoding_20text_20into_20base64.txt · Last modified: 2024/01/05 00:22 by 127.0.0.1