Con SQL Server 2005 (e successivi) è stata introdotta la funzione T-SQL HashBytes che permette di calcolare l'hash di una stringa.
In questo esempio genero un hash di tipo SHA1 ma sono disponibili anche MD2, MD4, MD5 e SHA.

SQL

DECLARE @inputString varchar(4000)  -- ASCII
SET @inputString = 'www.sgart.it'

DECLARE @convByte binary(20) -- 160 bit
SELECT @convByte = HashBytes('SHA1', @inputString)

SELECT @convByte
Il risultato sarà:

Text

0xF48811D5CBC9CBBE7147A2D633FBAE9F7D97F591
Avendo usato come tipo di dato i varchar la codifica da caratteri a byte avviene secondo l'encoding ASCII. Mentre con il tipo di dato nvarchar la conversione avviene usando un encoding Unicode.

SQL

DECLARE @inputString nvarchar(4000)  -- Unicode
SET @inputString = 'www.sgart.it'

DECLARE @convByte binary(20) -- 160 bit
SELECT @convByte = HashBytes('SHA1', @inputString)

SELECT @convByte
da come risultato:

Text

0x36A0F8F7A61B8ACA577F517C5EA7216AF06D6315
Attenzione ai tipi di dato char e nchar non danno lo stesso risultato dei tipi varchar e nvarchar nel caso di dati a lunghezza variabile. questo perché i tipi senza prefisso var occupano sempre tutti i byte indipendentemente dalla lunghezza della stringa. Quindi un char(5) che contiene 'AA' diventa 'AA ' (riempito con 3 spazzi) ed è diverso da un varchar(5) che sarà sempre 'AA'.

Vedi anche HashBytes (Transact-SQL)
Tags:
Database75 SQL90 SQL Server100 T-SQL66
Potrebbe interessarti anche: