我需要从SQL服务器的表中生成 SHA256 base 64 哈希,但我无法在list HASHBYTES参数中找到该算法。
有没有办法直接在SQL Server中生成它?
重复的disclamer:
我的问题不是SHA256 in T-sql stored procedure的重复,因为我正在寻找未在页面中列出的SHA256 base 64 版本的算法。
数字示例
我在SQL Server中有这个查询结果
开始日期,结束日期,POD,金额,货币
2016-01-01,2016-12-31,1234567890,12000,EUR
这给了我以下字符串(使用 concatenate 函数)
2016-01-012016-12-31123456789012000EUR
whit this convertion tool我得到以下哈希
GMRzFNmm90KLVtO1kwTf7EcSeImq + 96QTHgnWFFmZ0U
我需要发送给客户。
答案 0 :(得分:11)
首先,您提供的生成器链接以不完全正确的格式输出base64表示。即,它省略了padding sequence。虽然理论上是可选的,但MS SQL Server中必须使用填充(在2012和2016版本上测试)。
考虑到这一点,以下代码为您提供了所需的信息:
declare @s varchar(max), @hb varbinary(128), @h64 varchar(128);
select @s = '2016-01-012016-12-31123456789012000EUR';
set @hb = hashbytes('sha2_256', @s);
set @h64 = cast(N'' as xml).value('xs:base64Binary(sql:variable("@hb"))', 'varchar(128)');
select @hb as [BinaryHash], @h64 as [64Hash];
除了前面提到的填充之外,还有另一个需要注意的地方。确保输入字符串始终为相同类型,即始终为varchar
或始终为nvarchar
。如果您的某些哈希值将使用ASCII字符串计算,而某些哈希值则来自UTF-16,则结果将完全不同。根据系统中使用的语言,在散列之前始终将纯文本转换为nvarchar
可能是有意义的。