C# SQL中的HMAC计算与C的比较#

C# SQL中的HMAC计算与C的比较#,c#,sql,sql-server-2012,cryptography,hmac,C#,Sql,Sql Server 2012,Cryptography,Hmac,显然,我需要在SQL(SQL Server 2012)中进行HMAC计算,其值与我在C#中的计算值相同。 C#实施工作正在进行。它使用标准的.NET类 我希望避免使用SQLCLR,而是使用我认为应该根据其他帖子工作的方法 我有一种感觉,问题在于我为HMAC输入参数将varchar转换为varbinaries的方式。我是这样使用它的: DECLARE @hash VARBINARY(64) = ( SELECT dbo.HMAC('SHA2_512', -- Hash al

显然,我需要在SQL(SQL Server 2012)中进行HMAC计算,其值与我在C#中的计算值相同。 C#实施工作正在进行。它使用标准的.NET类

我希望避免使用SQLCLR,而是使用我认为应该根据其他帖子工作的方法

我有一种感觉,问题在于我为HMAC输入参数将varchar转换为varbinaries的方式。我是这样使用它的:

DECLARE @hash VARBINARY(64) = (
    SELECT dbo.HMAC('SHA2_512',         -- Hash alg.
        CAST('1234' AS VARBINARY),      -- Key
        CAST('12345678' AS VARBINARY))  -- Data
);

SELECT CONVERT(VARCHAR(max), @hash, 2) hash_varchar

-- Output: 180F85FDA172A3F1CCEAA25D4D63A05C03F0BF8D664A7AD81E2FE1FB2FF3D4BA754B90A75C58B1D2B8A11C52192CAF307658B4B6A81D06ECB2667F37DA753619
使用C#类计算同一密钥和数据的哈希值,得到以下输出:

8DB72756190593E0849AC6CA9B0DB4D3E0A1439AB2D9ECD6D07406020EEA6EE824A89C3DA0633B66AFE5BBA8D4CC5AB59347E8137F5AF6521725307B4DC8BCB5
作为参考,这里是我的准确C

我是做错了什么,还是执行了HMAC功能?

请参阅。查看SHA1的测试用例1:

test_case =     1
key =           0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
key_len =       20
data =          "Hi There"
data_len =      8
digest =        0xb617318655057264e28bc0b6fb378c8ef146be00
C#实现返回正确的值。T-SQL one返回的值不正确,
0xF193BA67BF66D733C10099B62D06F19AD98B1022
。QED。T-SQL代码是假的

请参阅。查看SHA1的测试用例1:

test_case =     1
key =           0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
key_len =       20
data =          "Hi There"
data_len =      8
digest =        0xb617318655057264e28bc0b6fb378c8ef146be00

C#实现返回正确的值。T-SQL one返回的值不正确,
0xF193BA67BF66D733C10099B62D06F19AD98B1022
。QED。T-SQL代码是假的

我知道这一点。问题是我是否错误地使用了HMAC sql函数(可能是在varchars的转换中),或者该函数是否如您所建议的那样是假的。对不起,如果不清楚的话,我知道。问题是我是否错误地使用了HMAC sql函数(可能是在varchars的转换中),或者该函数是否如您所建议的那样是假的。对不起,如果不清楚的话。