User Tools

Site Tools


encoding_20text_20into_20base64

This is an old revision of the document!


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 for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information
encoding_20text_20into_20base64.1522502358.txt.gz · Last modified: 2018/03/31 13:19 by 127.0.0.1