Dúvida ASCI Base Decode Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

Dúvida ASCI Base Decode

31 Mar 2022, 14:55

Existe alguma função no AHK que consiga fazer o decodificamento semelhante a esse site?

https://www.base64decode.org/


Queria decodificar um texto BASE64 ASCII para conseguir ler ele.

Como posso fazer isso de forma tranquila?

Grato pela atenção.

Atenciosamente,
Thales
User avatar
Gio
Posts: 1248
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Dúvida ASCI Base Decode  Topic is solved

01 Apr 2022, 09:12

Bom dia Thalesduarte.

Trabalhei com Base64 para adicionar imagens (os dados binários em si) em um código html há algum tempo. O usuário Skan criou duas funções que são bem úteis para isso. Segue o link:

https://www.autohotkey.com/board/topic/85709-base64enc-base64dec-base64-encoder-decoder/

Quanto ao uso disso especificamente para ASCII, o código usa uma função da DLL Crypt32.dll do Windows (CryptBinaryToString), que parece ter suporte tanto a código ANSI como unicode, porém isso parece estar condicionado à versão do AutoHotkey que você esteja utilizando. Já que o texto-alvo já está codificado em um BASE64 criado a partir de texto ASCII, suponho que se você rodar em uma versão ANSI do AutoHotkey o resultado da decodificação tenha mais chances de vir correto.

:arrow: Se não funcionar com o código do Skan, você ainda pode tentar programar diretamente na função CryptBinaryToString da API Crypt32 do Windows usando DllCall (o que te daria mais opções de ajuste): https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptbinarytostringa

:arrow: Em último caso você também pode criar seu próprio algoritmo de decodificação mexendo diretamente nos bits. O algoritmo Base64 é relativamente simples, então não deve ser tão difícil programar um decodificador usando NumGet()s e bitshifts.
thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

Re: Dúvida ASCI Base Decode

01 Apr 2022, 14:09

@Gio
Olá, boa tarde!

obrigado pela orientação, com base nessas suas explicações, consegui achar algo que conseguiu resolver.

Segue

Code: Select all

b64Decode(string)
{
    if !(DllCall("crypt32\CryptStringToBinary", "ptr", &string, "uint", 0, "uint", 0x1, "ptr", 0, "uint*", size, "ptr", 0, "ptr", 0))
        throw Exception("CryptStringToBinary failed", -1)
    VarSetCapacity(buf, size, 0)
    if !(DllCall("crypt32\CryptStringToBinary", "ptr", &string, "uint", 0, "uint", 0x1, "ptr", &buf, "uint*", size, "ptr", 0, "ptr", 0))
        throw Exception("CryptStringToBinary failed", -1)
    return StrGet(&buf, size, "UTF-8")
}
Atenciosamente,
Thales

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 5 guests