为 HashBytes 声明变量
Declare variable for HashBytes
我正在遵循这个 中的简单示例:
DECLARE @HASHBYTES VARBINARY(128) = hashbytes('sha2_256', 'secret')
SELECT cast(N'' as xml).value('xs:base64Binary(sql:variable("@HASHBYTES"))', 'varchar(128)');
它return一个正确的散列值:K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
现在我尝试按照 Microsoft Hashbytes 文档将 secret 声明为变量 example:
DECLARE @HashThis nvarchar(32);
SET @HashThis = CONVERT(nvarchar(32),'secret');
DECLARE @HASHBYTES VARBINARY(128) = hashbytes('sha2_256', @HashThis)
SELECT cast(N'' as xml).value('xs:base64Binary(sql:variable("@HASHBYTES"))', 'varchar(128)');
它 return 一个错误的散列:
s6jeuSg7FUrj9WBqMj0GbSRudEDi2NTJqHqmG5UYOiY=
有什么方法可以将 secret 声明为变量以获得正确的哈希值吗?
我是 SQL 中的 Hashbytes 新手。我在 SQL Server 2017 上使用它。
问题是您正在使用 nvarchar
来声明您的秘密。但它应该是 varchar
并且它会解决问题。
所以让我们测试一下:
DECLARE @HashThis varchar(32);
SET @HashThis = CONVERT(varchar(32),'secret');
DECLARE @HASHBYTES VARBINARY(128) = hashbytes('sha2_256', @HashThis)
SELECT cast(N'' as xml).value('xs:base64Binary(sql:variable("@HASHBYTES"))', 'varchar(128)');
会return你原来的预期:
K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
顺便说一句,你不需要转换,你可以将 secret 作为 varchar 传递。像这样的东西:
DECLARE @HashThis varchar(32);
SET @HashThis = 'secret';
我正在遵循这个
DECLARE @HASHBYTES VARBINARY(128) = hashbytes('sha2_256', 'secret')
SELECT cast(N'' as xml).value('xs:base64Binary(sql:variable("@HASHBYTES"))', 'varchar(128)');
它return一个正确的散列值:K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
现在我尝试按照 Microsoft Hashbytes 文档将 secret 声明为变量 example:
DECLARE @HashThis nvarchar(32);
SET @HashThis = CONVERT(nvarchar(32),'secret');
DECLARE @HASHBYTES VARBINARY(128) = hashbytes('sha2_256', @HashThis)
SELECT cast(N'' as xml).value('xs:base64Binary(sql:variable("@HASHBYTES"))', 'varchar(128)');
它 return 一个错误的散列:
s6jeuSg7FUrj9WBqMj0GbSRudEDi2NTJqHqmG5UYOiY=
有什么方法可以将 secret 声明为变量以获得正确的哈希值吗?
我是 SQL 中的 Hashbytes 新手。我在 SQL Server 2017 上使用它。
问题是您正在使用 nvarchar
来声明您的秘密。但它应该是 varchar
并且它会解决问题。
所以让我们测试一下:
DECLARE @HashThis varchar(32);
SET @HashThis = CONVERT(varchar(32),'secret');
DECLARE @HASHBYTES VARBINARY(128) = hashbytes('sha2_256', @HashThis)
SELECT cast(N'' as xml).value('xs:base64Binary(sql:variable("@HASHBYTES"))', 'varchar(128)');
会return你原来的预期:
K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
顺便说一句,你不需要转换,你可以将 secret 作为 varchar 传递。像这样的东西:
DECLARE @HashThis varchar(32);
SET @HashThis = 'secret';