sql-server - 如何比较 MS SQL 和 Snowflake 中 SHA-256 函数返回的十六进制编码字符串?
问题描述
我正在 Snowflake 和 SQL Server 中寻找返回相同 SHA-256 字符串值的哈希函数。因此,我决定比较Snowflake 的sha2 (SHA-256) 函数和 SQL Server 的 HASHBYTES (SHA2_256) 返回的十六进制编码字符串。以下是我提出的查询:
雪花:
SELECT sha2(TO_VARCHAR(ABS(12.5)), 256)
Returns: b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda
SQL 服务器:
SELECT CONVERT(VARCHAR(64), HASHBYTES('SHA2_256', CAST(12.5 AS varbinary(64))), 2) as tmp
Returns: 48DCB7B99301A1AA2D8A74637173AD8A3282844983F39ED7AB079A2ADF08FEEA
它们似乎返回不同的哈希字符串。这些函数是否确实有不同的底层实现或查询有问题?
我怀疑我对 SQL Server 的查询可能有错误。
解决方案
通过此示例,我在 SQL Server 和 Snowflake 中得到了相同的结果:
SQL 服务器:
SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA2_256', 'Hello World'), 1, 0))
SELECT CONVERT(VARCHAR(MAX), HASHBYTES('SHA2_256','Hello World'), 2);
SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA2_256', '12.5'), 1, 0))
SELECT CONVERT(VARCHAR(MAX), HASHBYTES('SHA2_256','12.5'), 2);
雪花:
SELECT sha2(TO_VARCHAR('Hello World'), 256);
SELECT sha2(TO_VARCHAR('12.5'), 256);
两者的结果:
Hello World: A591A6D40BF420404A011733CFB7B190D62C65BF0BCDA32B57B277D9AD9F146E
12.5: B902CC4550838229A710BFEC4C38CBC7EB11082367A409DF9135E7F007A96BDA
推荐阅读
- flutter - Dart/Flutter 中的 AsyncMemoizer
- javascript - 有没有办法使用 require.js 在网页中使用 puppeteer?
- php - 为什么我不能在 Wordpress 中创建新帖子?警告:从第 716 行 /public_html/wp-admin/includes/post.php 中的空值创建默认对象
- bash - dynamodb 查询属性,而不是项目
- html - 菜单响应纯 css
- r - 我尝试将 gz 文件读入 R,但收到一条错误消息:第 1 行没有 9 个元素
- ios - FireStore getDocuments() 函数在第一次搜索查询时运行速度极慢
- sql - PostrgreSQL 中是否有等价的 connectby 可以按树向上?
- c - C中速度问题的简单计算
- c# - 从字符串中提取年份并解析为 int