为什么SHA2-256在MySQL和MS SQL Express之间散列不一样?

时间:2015-03-25 18:36:48

标签: mysql sql-server hash sha256

我正在构建报告数据库并以CSV和MS SQL Server获取数据。这些主要是个人记录,由SSN捆绑在一起(好吧,不是真正的SSN,而是非常相似的东西)。出于安全原因,我们不存储SSN,而是存储SSN的SHA2-256哈希值。

在MySql 5.6上,我可以简单地使用内置函数:

sha2( string, 256).

对于MS SQL Express(在Windows 7上运行的SQL Server 2008),我使用此链接(http://geekswithblogs.net/hroggero/archive/2009/09/19/strong-password-hashing-with-sql-server.aspx)来编写外部UDF。

每个函数都应为同一个参数返回相同的字符串..但事实并非如此。更令人费解的是,二进制表示似乎完全不同:

MySql Output:   bfd6b995588ec54ce16871bc82a7ac86dd43a2c22309ea68e479a50043683937
MSSQL Output: 0x1B4F27012B7F6E7DA6563376E3CB560FCB07FDE2E33C6C3241A5D53885ABCF71

MSSQL输出显然是每个字节的低4位部分和高4位部分的十六进制编码(0-9,A-F)。但MySql如何表示二进制字符? 通过SqlYog和DOS命令行运行MySql查询......没有区别。 我已经检查了MySql文档以及我在网上找到的所有其他内容,没有运气。

1 个答案:

答案 0 :(得分:0)

实际上,MySql返回与MSSQL相同的十六进制代码,只是小写。我确实纠正了我的C#代码,现在两个函数都返回相同的字符串。 Hurrayyyyyyy