SQL Server中的SHA256 base 64哈希生成

Nic*_*sse 3 sql-server sha sha256

我需要从SQL服务器中的表生成SHA256 base 64哈希,但我在列表 HASHBYTES参数中找不到该算法.

有没有办法直接在SQL Server中生成它?

重复的disclamer:

我的问题是在T-sql存储过程中没有重复SHA256,因为我正在寻找未在页面中列出的SHA256 base 64版本的算法.

数字示例

我在SQL Server中有这个查询结果

开始日期,结束日期,POD,金额,货币

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

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

2016-01-012016-12-31123456789012000EUR

whit 这个转换工具我得到以下哈希

GMRzFNmm90KLVtO1kwTf7EcSeImq + 96QTHgnWFFmZ0U

我需要发送给客户.

Rog*_*olf 11

首先,您提供的生成器链接以不完全正确的格式输出base64表示.即,它省略了填充序列.虽然理论上是可选的,但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];
Run Code Online (Sandbox Code Playgroud)

除了前面提到的填充物,还有另一个需要注意的地方.确保输入字符串始终为相同类型,即始终varchar或始终nvarchar.如果您的某些哈希值将使用ASCII字符串计算,而某些哈希值则来自UTF-16,则结果将完全不同.根据系统中使用的语言,始终将纯文本转换为nvarchar散列之前可能是有意义的.