password decrypt calculate sql-server sql-server-2008 tsql sqlclr

sql-server - decrypt - sql server hash sha1



Hashing más de 8000 bytes en SQL Server (3)

Al igual que la idea de Paul, una idea que viene a la mente para fragmentar sería almacenar la cadena hash en una columna XML, con cada fragmento como un elemento XML separado.

La función hash de SQL Server HASHBYTES tiene un límite de entrada de 8000 bytes.

¿Cómo hasch cuerdas más grandes?


Podría hash 8k (o 4k o 2k) fragmentos de la entrada y luego concatenar esos hash o hash en un nuevo valor hash. Sin embargo, esto puede ser difícil si tiene que crear un algoritmo similar (en una aplicación .NET externa, por ejemplo) para comparar hashes creados fuera de SQL Server.

Otra opción: apoyarse en la integración CLR de SQL Server y realizar el hash en un ensamblado .NET.


Puede escribir una función SQL CLR:

[Microsoft.SqlServer.Server.SqlFunction] public static SqlBinary BigHashBytes(SqlString algorithm, SqlString data) { var algo = HashAlgorithm.Create(algorithm.Value); var bytes = Encoding.UTF8.GetBytes(data.Value); return new SqlBinary(algo.ComputeHash(bytes)); }

Y luego se puede llamar en SQL de esta manera:

--these return the same value select HASHBYTES(''md5'', ''test stuff'') select dbo.BigHashBytes(''md5'', ''test stuff'')

BigHashBytes solo es necesario si la longitud es superior a 8k.