【发布时间】:2010-10-24 18:25:36
【问题描述】:
我需要为要发送给第 3 方的 XML 字符串创建键控散列。这是我正在使用的代码,但它产生的哈希值与第 3 方发送给我的示例不同。我已经阅读了所有可以找到的教程,并一次又一次地重新阅读 MSDN。我究竟做错了什么?还是我应该怀疑另一端有问题?
Public Shared Function HashString(ByVal StringToHash As String) As String
Dim myEncoder As New System.Text.UTF32Encoding
Dim Key() As Byte = myEncoder.GetBytes(My.Settings.PortalHASH)
Dim XML() As Byte = myEncoder.GetBytes(StringToHash)
Dim myHMACSHA256 As New System.Security.Cryptography.HMACSHA256(Key)
Dim HashCode As Byte() = myHMACSHA256.ComputeHash(XML)
Return Convert.ToBase64String(HashCode)
End Function
它需要base-64编码,这就是我有最后一行的原因。
谢谢
【问题讨论】:
-
对我来说似乎是正确的。一个问题是您是否对哈希使用相同的密钥。 My.Settings.PortalHASH 表明它是散列而不是键。但是您可能选择了一个误导性的名称,而实际上它是关键。所以我的问题真的是:你如何得到钥匙?
-
key确实是第三方发给我们的Hash。它与函数返回的字符串格式相同,所以我认为以这种方式获取它的字节是正确的,将它们作为键传递。
-
如果第 3 方向您发送他们正在使用的密钥的哈希值,您现在可以得到预期的结果。您需要确保获得与第 3 方使用的密钥相同的密钥。
-
另一方面,如果从第 3 方发送给您的“哈希”只是密钥的 Base64 编码字符串,您需要在使用前对其进行解码
-
除了 CKret 的回答,我还需要更改为这个 Dim myEncoder As New System.Text.ASCIIEncoding。现在一切正常。检查您的编码人员
标签: vb.net hash encryption hmac sha256