【问题标题】:The correct way to encrypt a string using HmacSHA256 in VB.NET在 VB.NET 中使用 HmacSHA256 加密字符串的正确方法
【发布时间】: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


【解决方案1】:

(阅读我的 cmets)
如果 My.Settings.PortalHASH 是 Base64 编码的密钥,您需要这样做:

Dim Key() As Byte = Convert.FromBase64String(My.Settings.PortalHASH)

【讨论】:

  • 嗨,CKret,这很有意义 - 我尝试了上面的行,但它仍然不匹配,但我不敢相信第 3 方正在向我发送散列密钥 - 但是我会继续打电话给他们并仔细检查所有细节,谢谢。
  • 嗨 CKret,以及上面的答案,我使用了一个不正确的编码对象,我显然想要 ASCII 而不是 UTF32 - 如果他们告诉我就好了!你的答案是最接近的 - 干杯。
  • 好消息,您已修复它!我应该发现可能的编码问题,但可惜没有。嗯...幸好你解决了它。
【解决方案2】:

我无法评论VB的正确性,但从命名的明显性来看,我可以说它看起来是正确的。

所以这里没有足够的信息来说明问题所在;你可能已经说出了你所知道的一切。因此,为您验证这一点的人将是您的第三方。他们可以说出问题所在。

PS:奇怪的是对方没有发送nonce作为挑战?

【讨论】:

  • 另一端只是踢到服务器故障:) 目前,我们这边处于开发的早期阶段,所以我无法确定什么是错误的,因为它可能是任何东西!如果以上内容看起来确实正确,那么也许我的密钥错误或类似的错误,为您的输入欢呼
猜你喜欢
  • 2016-05-15
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
相关资源
最近更新 更多