Разные HMAC для CryptoJS и VB

Мне нужно сгенерировать HMACSHA256 в Visual Basic. Проблема в том, что я не получил правильный HMAC и получил другой HMACS

InputData = Test\nTest\n\nTest
secret = c39ff802b43a01c08ea759750c41d7d4bac6b1b884b3864d640b577cf1dca21a

HMACa = 330c55857e5ff197a407a9dcd41bbf03a2e8de0b351aba9a405139919b3cae57

JS(CryptoJS) -> HMACa (проверено напрямую)
PY -> HMACa (проверено напрямую)

JS(jsSHA) -> HMACb (проверено на: liavaag.org/English/SHA-Generator/HMAC/)
C#/VB -> HMACb (проверено напрямую)

Почему я получаю разные HMAC и что я могу сделать, чтобы получить HMACa в VB/C#??

Вот мой код 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

person Philipp    schedule 13.03.2018    source источник


Ответы (1)


Это намного проще, чем предполагалось. VB/C# не может кодировать '\n' как новую строку. В World of VisualBasic вам нужно написать vbLf, чтобы указать новую строку в строке.

Итак, теперь правильная InputString: "Test" + vbLf + "Test" + vbLf + vbLf + "Test"

Результат => HMACa

Спасибо, в любом случае

person Philipp    schedule 14.03.2018