Olá Pessoal,
Boa tarde!

Hoje vou fazer um post rápido, mas bem interessante para quem tem a necessidade de criptografar e/ou descriptografar strings utilizando o algoritmo Base64 no SQL Server. Muita gente não sabe, mas o SQL Server possui recursos para trabalhar com essa criptografia nativamente, sem precisar escrever toda a lógica para isso.

Um pouco sobre o Base64
Base64 é um método para codificação de dados para transferência na Internet (codificação MIME para transferência de conteúdo) . É utilizado frequentemente para transmitir dados binários por meios de transmissão que lidam apenas com texto, como por exemplo para enviar arquivos anexos por email.

É constituído por 64 caracteres ([A-Za-z0-9], “/” e “+”) que deram origem ao seu nome. O carácter “=” é utilizado como um sufixo especial e a especificação original (RFC 989) definiu que o símbolo “*” pode ser utilizado para delimitar dados convertidos, mas não criptografados, dentro de um stream.

Exemplo de codificação:
Texto original: hello world
Texto convertido para Base64: aGVsbG8gd29ybGQK

A codificação Base64 é frequentemente utilizada quando existe uma necessidade de transferência e armazenamento de dados binários para um dispositivo designado para trabalhar com dados textuais. Esta codificação é amplamente utilizada por aplicações em conjunto com a linguagem de marcação XML, possibilitando o armazenamento de dados binários em forma de texto.

Diferente das funções criptográficas como o MD5, SHA1, SHA-256 e outros, o Base64 é um método de criptografia, já que por definição, a encriptação é uma tarefa de mão dupla que você usa sempre que você precisa armazenar com segurança uma informação, mas precisa recuperá-la mais tarde através de uma chave simétrica ou privada. Já o hash, que é utilizado pelas funções criptográficas como as citadas acima, é comumente utilizado quando você necessita comparar informações e não é possível obter a string original a partir da string onde foi aplicado o Hash.

Agora vamos à prática!

Criptografando uma string
Para criptografar uma string, vamos utilizar a função fncBase64_Encode:

CREATE FUNCTION [dbo].[fncBase64_Encode] (
    @string VARCHAR(MAX)
) 
RETURNS VARCHAR(MAX)
AS BEGIN

    DECLARE 
        @source VARBINARY(MAX), 
        @encoded VARCHAR(MAX)
        
    SET @source = CONVERT(VARBINARY(MAX), @string)
    SET @encoded = CAST('' AS XML).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)')

    RETURN @encoded

END

Exemplo de utilização:

SELECT dbo.fncBase64_Encode('Bem vindo ao Blog') -- Irá retornar: QmVtIHZpbmRvIGFvIEJsb2c=

Descriptografando uma string
Para descriptografar uma string, vamos utilizar a função fncBase64_Decode:

CREATE FUNCTION [dbo].[fncBase64_Decode] (
    @string VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS BEGIN

    DECLARE @decoded VARCHAR(MAX)
    SET @decoded = CAST('' AS XML).value('xs:base64Binary(sql:variable("@string"))', 'varbinary(max)')

    RETURN CONVERT(VARCHAR(MAX), @decoded)
	
END

Exemplo de utilização:

SELECT dbo.fncBase64_Decode('Vm9sdGVtIHNlbXByZSE=') -- Irá retornar: Voltem sempre!

É isso aí pessoal!
Até mais.