HASHBYTES (Transact-SQL)

返回其在 SQL Server 中的输入的 MD2、MD4、MD5、SHA、SHA1 或 SHA2 哈希值。

适用范围:SQL Server(SQL Server 2008 到当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

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)

请参阅

概念

选择加密算法