目标:
从sql和c代码中检索相同的哈希值。
问题:
哈希值几乎相同。我用的是同样的哈希和sha。
输入:
“你好,世界!”
c代码:
https://dotnetfiddle.net/2ybfxy
sql代码:
DECLARE @HashThis varchar(32);
SET @HashThis = CONVERT(varchar(32),'Hello World!');
SELECT HASHBYTES('SHA2_256', @HashThis);
输出:
c代码结果:
“7F83B1657FF1FC53B92DC18148A1D65DFC2D4B1FA3D677284添加D200126D9069”
sql代码的结果:
“0x7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284添加d200126d9069”
有没有好的或推荐的方法来删除数据“0x”?
谢谢您!
2条答案
按热度按时间weylhg0b1#
这应该做到:
但是如果你向数据库发送一个二进制文件,你应该能够将它与hashbytes的结果进行比较,而不需要任何转换。同样,如果你把它作为字节[]带到你的c应用程序。
xjreopfe2#
改变
SELECT HASHBYTES('SHA2_256', @HashThis);
到SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_256', @HashThis)), 3, 64)
取自convert hashbytes to varchar正如@magnus在评论中指出的,子字符串长度应该是64。