首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为HashBytes声明变量

为HashBytes声明变量
EN

Stack Overflow用户
提问于 2020-06-18 06:07:49
回答 1查看 89关注 0票数 1

我遵循了这个question中的简单示例

代码语言:javascript
复制
DECLARE @HASHBYTES VARBINARY(128) = hashbytes('sha2_256', 'secret')
SELECT cast(N'' as xml).value('xs:base64Binary(sql:variable("@HASHBYTES"))', 'varchar(128)');

它返回正确散列值:K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=

现在,我尝试按照Microsoft Hashbytes文档example将secret声明为变量

代码语言:javascript
复制
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)');

它返回错误散列:

代码语言:javascript
复制
s6jeuSg7FUrj9WBqMj0GbSRudEDi2NTJqHqmG5UYOiY=

有没有办法将secret声明为变量以获得正确的散列?

我对SQL中的Hashbytes是个新手。我正在SQL Server 2017上使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-29 03:19:12

问题是您正在使用nvarchar声明您的秘密。但它应该是varchar,它可以解决这个问题。

因此,让我们来测试一下:

代码语言:javascript
复制
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)');

将返回您最初期望的内容:

代码语言:javascript
复制
K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=

顺便说一句,你不需要转换,你只需将secret作为varchar传递即可。一些类似的东西:

代码语言:javascript
复制
DECLARE @HashThis varchar(32);
SET @HashThis = 'secret';
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62439149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档