【问题标题】:Different HMAC for CryptoJS and VBCryptoJS 和 VB 的不同 HMAC
【发布时间】:2018-03-13 15:53:15
【问题描述】:

我必须在 Visual Basic 中生成 HMACSHA256。问题是,我没有收到正确的 HMAC 并得到不同的 HMACS

输入数据 = 测试\n测试\n\n测试
秘密 = c39ff802b43a01c08ea759750c41d7d4bac6b1b884b3864d640b577cf1dca21a

HMACa = 330c55857e5ff197a407a9dcd41bbf03a2e8de0b351aba9a405139919b3cae57
HMACb = f701ea7028f20df11a52bee297a336de212655a8bad01d848eeaa87d0f76ee5e

JS(CryptoJS) -> HMACa(直接测试)
PY -> HMACa(直接测试)

JS(jsSHA) -> HMACb(测试于:liavaag.org/English/SHA-Generator/HMAC/)
C#/VB -> HMACb(直接测试)

为什么我会得到不同的 HMAC 以及如何在 VB/C# 中得到 HMACa??

这是我的 VB 代码:

Sub Main()
    Dim sToHash As String = "Test\nTest\n\nTest"
    Dim sKey As String = "c39ff802b43a01c08ea759750c41d7d4bac6b1b884b3864d640b577cf1dca21a"
    Console.WriteLine(getHMAC(sToHash, sKey))
End Sub

Function getHMAC(ToHash As String, SecretKey As String) As String
    Dim aoText() As Byte = System.Text.Encoding.UTF8.GetBytes(ToHash)
    Dim aoKey() As Byte = System.Text.Encoding.UTF8.GetBytes(SecretKey)

    Using oHmac As New System.Security.Cryptography.HMACSHA256(aoKey)
        Dim sHash As Byte() = oHmac.ComputeHash(aoText)
        Return ByteToString(sHash)
    End Using
End Function

Function ByteToString(buff As Byte()) As String
    Dim getbinary As String = ""
    For i As Integer = 0 To buff.Length - 1
        getbinary += buff(i).ToString("X2")
    Next
    Return (getbinary).ToLower
End Function

【问题讨论】:

    标签: javascript cryptography hmac basic


    【解决方案1】:

    这比预期的要容易得多。 VB/C# 不能将 '\n' 编码为换行符。在 VisualBasic 世界中,您必须编写 vbLf 来指示字符串中的换行符

    所以现在正确的 InputString 是: "测试" + vbLf + "测试" + vbLf + vbLf + "测试"

    结果 => HMACa

    还是谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 2013-07-29
      • 2014-08-23
      • 1970-01-01
      • 2017-12-29
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多