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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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:
1 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 |
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:
1 |
SELECT dbo.fncBase64_Decode('Vm9sdGVtIHNlbXByZSE=') -- Irá retornar: Voltem sempre! |
É isso aí pessoal!
Até mais.