Hola, chicos,
¡Buenas tardes!

Hoy voy a hacer una publicación rápida pero muy interesante para cualquiera que necesite cifrar y/o descifrar cadenas usando el algoritmo Base64 en SQL Server. Mucha gente no lo sabe, pero SQL Server tiene recursos para trabajar con este cifrado de forma nativa, sin tener que escribir toda la lógica para ello.

Un poco sobre Base64
Base64 es un método para codificar datos para su transferencia a través de Internet (codificación MIME para transferencia de contenido). A menudo se utiliza para transmitir datos binarios a través de medios de transmisión que solo manejan texto, como el envío de archivos adjuntos por correo electrónico.

Consta de 64 caracteres ([A-Za-z0-9], “/” y “+”) que dieron origen a su nombre. El carácter "=" se utiliza como sufijo especial y la especificación original (RFC 989) definía que el símbolo "*" se puede utilizar para delimitar datos convertidos pero no cifrados dentro de una secuencia.

Ejemplo de codificación:
Texto original: hola mundo
Texto convertido a Base64: aGVsbG8gd29ybGQK

La codificación Base64 se utiliza a menudo cuando es necesario transferir y almacenar datos binarios en un dispositivo diseñado para trabajar con datos textuales. Esta codificación es ampliamente utilizada por aplicaciones junto con el lenguaje de marcado XML, lo que permite el almacenamiento de datos binarios en forma de texto.

A diferencia de las funciones criptográficas como MD5, SHA1, SHA-256 y otras, Base64 es un método de cifrado, ya que, por definición, el cifrado es una tarea bidireccional que se utiliza siempre que necesita almacenar información de forma segura, pero necesita recuperarla más tarde utilizando una clave simétrica o privada. El hash, que es utilizado por funciones criptográficas como las mencionadas anteriormente, se usa comúnmente cuando se necesita comparar información y no es posible obtener la cadena original de la cadena donde se aplicó el Hash.

¡Ahora pongámonos a practicar!

Cifrar una cadena
Para cifrar una cadena, usaremos la función 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

Ejemplo de uso:

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

Descifrando una cadena
Para descifrar una cadena, usaremos la función 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

Ejemplo de uso:

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

¡Eso es todo amigos!
Hasta más tarde.