Page 1 of 1

SetRequestHeader and Cipher Base64 in SpiderBasic

Posted: Tue Dec 01, 2015 8:32 am
by Stefan Schnell
Hello community,

I want to transfer an authorization string via HTTP to an application server. Is it possible to add this string via SpiderBasic to a HttpRequest?

It is necessary to encode this Basic authorization with Base64. Is it possible with SpiderBasic to do that?

Is it planned to implement a cipher library in Spider Basic?

Thanks in advance for hints and answers.

Cheers
Stefan

Re: SetRequestHeader and Cipher Base64 in SpiderBasic

Posted: Tue Dec 01, 2015 2:39 pm
by Fred
Yes, a cipher library is planned but won't be for the next version. That said, Base64 encoding is relatively trivial, so it should be doable in SpiderBasic itself :)

Re: SetRequestHeader and Cipher Base64 in SpiderBasic

Posted: Tue Dec 01, 2015 11:20 pm
by e2robot
Here is a rough snippet using CryptoJS

There are easier ways to do Base64 but this library does heaps of other types.


Regards,
Phil

Code: Select all

!$.getScript("http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/core-min.js", loadok1);
!function loadok1()
!{
Debug "OK1"
!}


!$.getScript("http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-utf16-min.js", loadok2);
!function loadok2()
!{
Debug "OK2"
!}



!$.getScript("http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js", loadok3);
!function loadok3()
!{
Debug "OK3"
!}

Procedure button1pressed()
  text.s="Hello World"
  Debug text
 !var v_words  = CryptoJS.enc.Utf8.parse(v_text);
 !var v_base = CryptoJS.enc.Base64.stringify(v_words);
    
  Debug "base " +base
EndProcedure



  If OpenWindow(0, 10,10,500,300 , "TEST")
        ButtonGadget(1 ,10, 80, 100, 100, "1")
 EndIf
 
  BindGadgetEvent(1,@button1pressed(),#PB_EventType_LeftClick)

Re: SetRequestHeader and Cipher Base64 in SpiderBasic

Posted: Wed Dec 02, 2015 8:58 am
by Stefan Schnell
Hello Fred and Phil,

thanks you for your requests, I will try it.

Cheers
Stefan

Re: SetRequestHeader and Cipher Base64 in SpiderBasic

Posted: Wed Dec 19, 2018 12:47 am
by kpeters58
For those who prefer Spiderbasic code over yet another JS library:

Code: Select all


EnableExplicit
; -------------------------------------------------------------------------------------------------
Procedure.s Base64Encode(Text.s)    
  Protected base64chars.s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", i.i, 
            encodedstr.s  = "", paddingstr.s = "", three_byte_number.i, n1.i, n2.i, n3.i, n4.i, 
            padcount = Len(Text) % 3
  
  ; right pad to make the length of the incoming string a multiple of 3
  If (padcount > 0) 
    paddingstr = Left("==", 3 - padcount)
    Text + Left(Chr(0) + Chr(0), 3 - padcount)
  EndIf  
  ; iterate over the length of the incoming string, three characters at a time
  For i = 1 To Len(Text) Step 3
    ; these three 8-bit (ASCII) characters become one 24-bit number
    three_byte_number = Asc(Mid(Text, i, 1)) << 16 + Asc(Mid(Text, i + 1, 1)) << 8 + Asc(Mid(Text, i + 2, 1)) 
    ; this 24-bit number then gets split into four 6-bit numbers
    n1 = 1 + (three_byte_number >> 18) & 63
    n2 = 1 + (three_byte_number >> 12) & 63
    n3 = 1 + (three_byte_number >> 6)  & 63
    n4 = 1 + (three_byte_number)       & 63
    ; those four 6-bit numbers are used as indices into the base64 character list
    encodedstr + Mid(base64chars, n1, 1) + Mid(base64chars, n2, 1) + Mid(base64chars, n3, 1) + Mid(base64chars, n4, 1)
    ; need newlines after every 76 output characters, according to MIME RFC 2045
    If ((i * 4) / 3) % 76 = 0
      encodedstr + Chr(13) + Chr(10)
    EndIf  
  Next
	ProcedureReturn Mid(encodedstr, 0, Len(encodedstr) - Len(paddingstr)) + paddingstr ; RFC 2045: trailing CR/LF ?
EndProcedure

Procedure.s BasicAuth(Username.s, Password.s)
  ProcedureReturn "Basic " + Base64Encode(Username + ":" + Password)
EndProcedure  

; Test cases - verified against base64encode.org results
Debug Base64Encode("Show me the cow")             ; should return 'U2hvdyBtZSB0aGUgY293'
Debug Base64Encode("Send money & cigarettes")     ; should return 'U2VuZCBtb25leSAmIGNpZ2FyZXR0ZXM='
Debug BasicAuth("test", "password")               ; should return 'dGVzdDpwYXNzd29yZA==''

Re: SetRequestHeader and Cipher Base64 in SpiderBasic

Posted: Wed Dec 19, 2018 10:01 am
by Peter
kpeters58 wrote:For those who prefer Spiderbasic code over yet another JS library:
you can also use the inbuild btoa() (and atob()) - JavaScript - functions:

Code: Select all

; https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

Procedure.s Base64EncodeString(Input.s) 
  !  return btoa(encodeURIComponent(v_input).replace(/%([0-9A-F]{2})/g,
  !    function toSolidBytes(match, p1) {
  !      return String.fromCharCode('0x' + p1);
  !  }));
EndProcedure

Procedure.s Base64DecodeString(Input.s)
  !  return decodeURIComponent(atob(v_input).split('').map(function(c) {
  !    return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
  !  }).join(''));
EndProcedure

Debug Base64EncodeString("Show me the cow")             ; should return 'U2hvdyBtZSB0aGUgY293'
Debug Base64EncodeString("Send money & cigarettes")     ; should return 'U2VuZCBtb25leSAmIGNpZ2FyZXR0ZXM='