Trabalhando com HASHBYTES no SQL Server

Hoje precisei criar uma função para gerar um Hash SHA2_512 dentro de um banco SQL Server 2016.

Para quem não conhece ou não sabe, uma função hash é um algoritmo que mapeia dados de comprimento variável para dados de comprimento fixo. Os valores retornados por uma função hash são chamados valores hash, códigos hash, somas hash (hash sums), checksums ou simplesmente hashes. É muito utilizado para armazenar senhas… cria-se um hash da senha do usuário e o resultado é armazenado, não deixando no banco a senha original.

Importante dizer: o hash não é uma criptografia. Ou seja: não há retorno. No caso da senha, por exemplo, será necessário fazer o comparativo pelo hash.

Imagine um formulário de login, por exemplo. Quando ele for submetido pelo usuário, o sistema deverá gerar o hash code do que foi preenchido no campo de senha e comparar com o hash que está no banco.

O SQL Server possui uma função nativa para retornar hash nos modelos mais utilizados (MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512). Chama-se HASHBYTES.

HASHBYTES ( ‘algorítimo’, { @input | ‘input’ } )
algorítimo::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512

Exemplo:

DECLARE @HashThis nvarchar(4000);SET @HashThis = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf');SELECT HASHBYTES('SHA1', @HashThis);

No meu caso, para facilitar, eu criei uma função… daí fica mais fácil para desenvolvedores inexperientes fazerem o uso correto. Segue abaixo o código:

CREATE OR ALTER FUNCTION HashSenhaUsuario(@valorSenha VARCHAR(max))RETURNS VARCHAR(max)   BEGIN   RETURN(select convert(varchar,HASHBYTES('SHA2_512',@valorSenha)))END

A utilização fica mais ou menos assim:

select (HashSenhaUsuario('teste'))

Espero ter ajudado.
Obrigado pela visita.