DEV Community

Cover image for C# - Codificando strings com base64
Mauricio Cunha
Mauricio Cunha

Posted on

C# - Codificando strings com base64

Conceito

Strings encodadas com base64 permitem que você trabalhe com fluxos de ida e vinda de dados de uma forma segura, evitando que por exemplo caracteres reservados ao HTML (como & e ?) sejam enviados durante as requisições

Criando as funções

Adicione em uma classe de gerenciamento interna (geralmente um Helper) os métodos a seguir para ter efetivamente um controle mais direto de base64 com as operações de encode/decode e checagem.

Atenção para o fato de que você deverá referenciar as namespaces System.Text e System.Convert em sua classe.

Para codificar

        public static string EncodeBase64(string value)
        {
            var keyBytes = Encoding.UTF8.GetBytes(value);
            return Convert.ToBase64String(keyBytes);
        }

Enter fullscreen mode Exit fullscreen mode

Para decodificar

        public static string DecodeBase64(string value)
        {
            var base64EncodedBytes = System.Convert.FromBase64String(value);
            return Encoding.UTF8.GetString(base64EncodedBytes);
        }

Enter fullscreen mode Exit fullscreen mode

E finalmente, para verificar se a string é de fato um base64 válido

        public static bool IsBase64(string value)
        {
            Span<byte> buffer = new Span<byte>(new byte[value.Length]);
            return Convert.TryFromBase64String(value, buffer, out int _);
        }
Enter fullscreen mode Exit fullscreen mode

Usando

Para utilizar basta chamar as funções, um exemplo no meu caso:

return Redirect("/usuario/login?redir=" + StringHelper.EncodeBase64("/arquivo/novo"));
Enter fullscreen mode Exit fullscreen mode

Após ter codificado uma url de forma segura, na controller simplesmente usei:

if (string.IsNullOrEmpty(model.Redir) || !StringHelper.IsBase64(model.Redir))
            {
                return Redirect("/home");
            }
            else
            {
                    model.Redir = StringHelper.DecodeBase64(model.Redir);

                if (Uri.IsWellFormedUriString(model.Redir, UriKind.RelativeOrAbsolute))
                {
                    return Redirect(model.Redir);
                }
            }
Enter fullscreen mode Exit fullscreen mode

Top comments (0)