Hash SHA1 con SQL Server 2005
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.
Il risultato sarà:
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.
da come risultato:
Vedi anche HashBytes (Transact-SQL)
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
Text
0xF48811D5CBC9CBBE7147A2D633FBAE9F7D97F591
SQL
DECLARE @inputString nvarchar(4000) -- Unicode
SET @inputString = 'www.sgart.it'
DECLARE @convByte binary(20) -- 160 bit
SELECT @convByte = HashBytes('SHA1', @inputString)
SELECT @convByte
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)