HASHBYTES (Transact-SQL)
返回其在 SQL Server 中的输入的 MD2、MD4、MD5、SHA、SHA1 或 SHA2 哈希值。
适用范围:SQL Server(SQL Server 2008 到当前版本)。 |
语法
HASHBYTES ( '<algorithm>', { @input | 'input' } )
<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512
参数
'<algorithm>'
标识用于对输入执行哈希操作的哈希算法。 这是必选参数,无默认值。 需要使用单引号。@input
指定包含要对其执行哈希操作的数据的变量。 @input 的数据类型为 varchar、nvarchar 或 varbinary。' input '
指定一个表达式,其计算结果为要对其执行哈希操作的字符或二进制字符串。允许的输入值限制为 8000 个字节。 输出符合算法标准:MD2、MD4 和 MD5 为 128 位(即 16 个字节);SHA 和 SHA1 为 160 位(即 20 个字节);SHA2_256 为 256 位(即 32 个字节),SHA2_512 为 512 位(即 64 个字节)。
SHA2_256 的 256 位(32 字节)和 SHA2_512 的 512 位(64 字节)限制适用于 SQL Server 2012 到 SQL Server 2014。
返回值
varbinary(最大为 8000 个字节)
示例
返回变量的哈希
以下示例返回变量 @HashThis 中存储的 nvarchar 数据的 SHA1 哈希值。
DECLARE @HashThis nvarchar(4000);
SET @HashThis = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf');
SELECT HASHBYTES('SHA1', @HashThis);
返回表列的哈希
下面的示例返回 Test1 表 c1 列中值的 SHA1 哈希。
CREATE TABLE dbo.Test1 (c1 nvarchar(50));
GO
INSERT dbo.Test1 VALUES ('This is a test.'), ('This is test 2.');
GO
SELECT HASHBYTES('SHA1', c1) FROM dbo.Test1;
下面是结果集:
-------------------------------------------
0x0E7AAB0B4FF0FD2DFB4F0233E2EE7A26CD08F173
0xF643A82F948DEFB922B12E50B950CEE130A934D6
(2 row(s) affected)