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
可能是有意义的。
我需要从 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
可能是有意义的。