SQL 服务器中的 SHA256 base 64 哈希生成

SHA256 base 64 hash generation in SQL Server

我需要从 SQL 服务器中的 table 生成一个 SHA256 base 64 哈希,但我在 list HASHBYTES 参数。

有没有办法直接在SQL服务器中生成?

重复免责声明:

我的问题不是 SHA256 in T-sql stored procedure 的重复问题,因为我正在寻找页面中未列出的算法的 SHA256 base 64 版本。

数值示例

我在 SQL 服务器

中有这个查询结果

Start date,End date,POD,Amount,Currency

2016-01-01,2016-12-31,1234567890,12000,EUR

这给我以下字符串(使用 concatenate 函数)

2016-01-012016-12-31123456789012000EUR

whit this convertion tool 我得到以下哈希

GMRzFNmm90KLVtO1kwTf7EcSeImq+96QTHgnWFFmZ0U

我需要发送给客户。

首先,您提供的生成器 link 以不完全正确的格式输出 base64 表示。即,它省略了 padding sequence。虽然理论上是可选的,但在 MS SQL 服务器中填充是强制性的(在 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 可能是有意义的。