HASHBYTES (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库

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

Transact-SQL 语法约定

语法

HASHBYTES ( '<algorithm>', { @input | 'input' } )  
  
<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512   

参数

<algorithm>
标识用于对输入执行哈希操作的哈希算法。 这是必选参数,无默认值。 需要使用单引号。 从 SQL Server 2016 (13.x) 开始,除 SHA2_256 和 SHA2_512 以外的所有算法都已过时。

@input
指定包含要对其执行哈希操作的数据的变量。 为 varchar、nvarchar 或 varbinary@input

'input'
指定一个表达式,其计算结果为要对其执行哈希操作的字符或二进制字符串。

输出符合算法标准:MD2、MD4 和 MD5 为 128 位(即 16 个字节);SHA 和 SHA1 为 160 位(即 20 个字节);SHA2_256 为 256 位(即 32 个字节),SHA2_512 为 512 位(即 64 个字节)。

适用于:SQL Server 2012 (11.x) 及更高版本

对于 SQL Server 2014 (12.x) 和更早版本,允许的输入值限制为 8000 个字节。

返回值

varbinary(最大 8000 个字节)

备注

请考虑使用 CHECKSUMBINARY_CHECKSUM 作为替代方案,以计算哈希值。

自 SQL Server 2016 (13.x) 起,已弃用 MD2、MD4、MD5、SHA 和 SHA1 算法。 请改用 SHA2_256 或 SHA2_512。 旧算法将继续起作用,但会抛出弃用事件。

示例

返回变量的哈希

以下示例返回变量 @HashThis 中存储的 nvarchar 数据的 SHA2_256 哈希值

DECLARE @HashThis NVARCHAR(32);  
SET @HashThis = CONVERT(NVARCHAR(32),'dslfdkjLK85kldhnv$n000#knf');  
SELECT HASHBYTES('SHA2_256', @HashThis);  

返回表列的哈希

下面的示例返回 Test1c1 列中值的 SHA2_256 哈希。

CREATE TABLE dbo.Test1 (c1 NVARCHAR(32));  
INSERT dbo.Test1 VALUES ('This is a test.');  
INSERT dbo.Test1 VALUES ('This is test 2.');  
SELECT HASHBYTES('SHA2_256', c1) FROM dbo.Test1;  

结果集如下。

-------------------------------------------  
0x741238C01D9DB821CF171BF61D72260B998F7C7881D90091099945E0B9E0C2E3 
0x91DDCC41B761ACA928C62F7B0DA61DC763255E8247E0BD8DCE6B22205197154D  
(2 row(s) affected)  

另请参阅

选择加密算法CHECKSUM_AGG (Transact-SQL)CHECKSUM (Transact-SQL)BINARY_CHECKSUM (Transact-SQL)