HASHBYTES 'SHA1' return 与标准 SHA1 实现不同的值

HASHBYTES 'SHA1' return value that differ to standard SHA1 implementation

我正在计算 table 中每一行的 HASH 值(用于比较目的),在实施算法后我正在测试结果。 结果是一致的,算法似乎有点工作,但是一步步测试我发现了一个奇怪的结果。

脚本:

SELECT HASHBYTES('SHA1', (SELECT INNERTBL.VALUT FOR XML RAW)) as KHASH
FROM ACLING AS INNERTBL

应该对 table 密钥执行 SHA1 计算,但是当我使用外部工具执行相同的计算时,我得到不同的结果:

事实上,当我使用外部工具(这里的工具:https://emn178.github.io/online-tools/sha1.html)执行 SHA1('<row VALUT="A"/>') 时,我得到了不同的结果:

所以我的问题是,我的逻辑有问题还是只是 SQL 服务器使用了一些非标准的 SHA1“参数化”? (我怀疑使用可能是标准但特殊的填充方案)

提琴手中的示例:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=efa4e0ba11c112f54e36afb5d54d2cce

SELECT HASHBYTES('SHA1','<row VALUT="A"/>'), --- you are testing this
HASHBYTES('SHA1',N'<row VALUT="A"/>') -- ..but for xml returns Nvarchar

重要的是要记住,只有当字符串二进制相同时,您才能得到相同的结果。例如,如果两个字符串使用不同的字符集,它们将具有不同的 HASH 值。有关详细信息,请查看 https://security.stackexchange.com/questions/18290/is-sha-1-hash-always-the-same