GroggyOtter

Base64 reduced code

Feb 2nd, 2023
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #Requires AutoHotkey >= v2.0                                    ; Ensures that you're using AHKv2
  2. #SingleInstance Force                                           ; Only 1 instance of the script can run
  3.  
  4. test()
  5. ExitApp()
  6.  
  7. *Esc::ExitApp
  8.  
  9. test(){
  10.     ; Correct:
  11.     ; SGVsbG8sIHdvcmxkIQ==
  12.     txt := "Hello, world!"
  13.     enc := buf64_encode(txt)
  14.     dec := buf64_decode(enc)
  15.     MsgBox "start: " txt
  16.         . "`nencode: " enc
  17.         . "`ndecode: " dec
  18. }
  19.  
  20. buf64_encode(strIn, encoding := "UTF-8") {
  21.     static dwFlags := 0x40000001                                ; CRYPT_STRING_BASE64 + CRYPT_STRING_NOCRLF
  22.    
  23.     (encoding = "UTF-8")                                        ; If UTF encoding
  24.         ? suffix := "A"                                         ; Use ANSI func
  25.         : (suffix := "W", encoding := "UTF-16")                 ; Else set encoding and use wide func
  26.    
  27.     ,chars := Buffer(4, 0)                                      ; Create chars buffer
  28.     ,bufStr := Buffer(StrPut(strIn, encoding)-1)                ; Build string buffer
  29.     ,StrPut(strIn, bufStr, encoding)                            ; Populate buffer
  30.    
  31.     bin2str(pszString) =>
  32.         DllCall("Crypt32\CryptBinaryToString" suffix            ; Call to appropriate func
  33.                ,"Ptr"   ,bufStr                                 ; const BYTE *pbBinary,
  34.                ,"UInt"  ,bufStr.Size                            ; DWORD      cbBinary,
  35.                ,"UInt"  ,dwFlags                                ; DWORD      dwFlags,
  36.                ,"Ptr"   ,pszString                              ; LPWSTR     pszString,
  37.                ,"Ptr"   ,chars)                                 ; DWORD      *pcchString
  38.    
  39.     return bin2str(0)                                           ; Call to get size of string out
  40.         ? bin2str(strOut := Buffer(NumGet(chars, "UInt"), 0))   ; Call to get string out
  41.             ? StrGet(strOut, encoding)                          ; Return encoded string
  42.             : MsgBox("Error getting encoded string.") ? 0 : 0   ; Error getting encoded string
  43.         : MsgBox("Error getting string size.") ? 0 : 0          ; Error getting string out size
  44. }
  45.  
  46. buf64_decode(strIn, encoding := "UTF-8") {
  47.     static CRYPT_STRING_BASE64 := 0x1
  48.    
  49.     (encoding = "UTF-8")                                        ; If UTF encoding
  50.         ? suffix := "A"                                         ; Use ANSI func
  51.         : (suffix := "W", encoding := "UTF-16")                 ; Else set encoding and use wide func
  52.    
  53.     ,bufStr := Buffer(StrPut(strIn, encoding)-1)                ; Create chars buffer
  54.     ,StrPut(strIn, bufStr, encoding)                            ; Build string buffer
  55.     ,chars := Buffer(4, 0)                                      ; Populate buffer
  56.    
  57.     str2bin(pbBinary) =>
  58.         DllCall("Crypt32\CryptStringToBinary" suffix
  59.                ,"Ptr"   , bufStr                                ;[in]      LPCSTR pszString,
  60.                ,"UInt"  , bufStr.Size                           ;[in]      DWORD  cchString,
  61.                ,"UInt"  , CRYPT_STRING_BASE64                   ;[in]      DWORD  dwFlags,
  62.                ,"Ptr"   , pbBinary                              ;[in]      BYTE   *pbBinary,
  63.                ,"Ptr"   , chars                                 ;[in, out] DWORD  *pcbBinary,
  64.                ,"Ptr"   , 0                                     ;[out]     DWORD  *pdwSkip,
  65.                ,"Ptr"   , 0 )                                   ;[out]     DWORD  *pdwFlags
  66.    
  67.     return str2bin(0)                                           ; Call to get size of string out
  68.         ? str2bin(strOut := Buffer(NumGet(chars, "UInt"), 0))   ; Call to get string out
  69.             ? StrGet(strOut, encoding)                          ; Return encoded string
  70.             : MsgBox("Error getting encoded string.") ? 0 : 0   ; Error getting encoded string
  71.         : MsgBox("Error getting string size.") ? 0 : 0          ; Error getting string out size
  72. }
Add Comment
Please, Sign In to add comment