2009-05-08 8 views
0

Ich muss einen verschlüsselten Hash für eine XML-Zeichenfolge erstellen, um an eine Drittpartei zu senden. Dies ist der Code, den ich benutze, aber es erzeugt einen anderen Hash als das Beispiel, das die dritte Partei mir geschickt hat. Ich habe alle Tutorials durchgelesen, die ich finden kann und lese MSDN immer wieder. Was mache ich falsch? Oder sollte ich ein Problem am anderen Ende vermuten?Die richtige Methode zum Verschlüsseln einer Zeichenfolge mit HmacSHA256 in VB.NET

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 

Es muss Base-64 codiert sein, weshalb ich die letzte Zeile habe.

Dank

+0

Es scheint mir richtig. Die eine Frage ist, ob Sie den gleichen Schlüssel für den Hash verwenden. My.Settings.PortalHASH schlägt vor, dass es ein Hash ist, kein Schlüssel. Aber Sie könnten einen irreführenden Namen gewählt haben und in Wirklichkeit ist es der Schlüssel. Meine Frage ist also: Wie bekommen Sie den Schlüssel? –

+0

Der Schlüssel ist in der Tat ein Hash von der dritten Partei an uns gesendet. Es ist das gleiche Format wie die von der Funktion zurückgegebene Zeichenfolge, so dass ich dachte, dass es korrekt ist, ihre Bytes auf diese Weise zu erhalten und sie als Schlüssel zu übergeben. –

+0

Wenn der Drittanbieter Ihnen den Hash des Schlüssels sendet, den er verwendet, können Sie jetzt das erwartete Ergebnis erhalten. Sie müssen sicherstellen, dass Sie den gleichen Schlüssel erhalten, den der Drittanbieter verwendet. –

Antwort

1

(Lesen Sie meine Kommentare)
Wenn My.Settings.PortalHASH die Base64 codiert Schlüssel Sie dies tun müssen, ist:

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

Hi CKret, das macht viel Sinn - Ich versuchte die Zeile oben und es stimmt immer noch nicht, aber ich kann es nicht glauben Die dritte Partei schickt mir den Schlüssel Hashed - ich werde jedoch zu ihnen telefonieren und alle Details überprüfen, Danke. –

+0

Hallo CKret, sowie die obige Antwort Ich benutzte ein falsches Encoding-Objekt Ich wollte ASCII nicht UTF32 anscheinend - wäre schön gewesen, wenn sie mir gesagt hätten! Ihre Antwort war jedoch am nächsten - Prost. –

+0

Tolle Neuigkeiten, dass Sie es repariert haben! Ich hätte das mögliche Codierungsproblem aufgreifen sollen, aber leider nicht. Nun ... gut, dass du es gelöst hast. –

0

ich auf der Richtigkeit der VB nicht äußern kann, aber von der Offensichtlichkeit der Namensgebung, kann ich sagen, dass es richtig aussieht.

Also gibt es nicht genug Informationen hier, um zu sagen, was falsch ist; und du hast wahrscheinlich alles gesagt, was du weißt. Daher sind die Leute, die dies für Sie überprüfen, Ihre dritte Partei. Sie könnten sagen, was falsch war.

PS: Seltsam, dass die andere Partei kein Nonce als Herausforderung geschickt hat?

+0

Das andere Ende kickt nur zu einem Server Fehler :) im Moment ist unsere Seite in sehr frühen Stadien der Entwicklung und so kann ich nicht identifizieren, was falsch ist, wie es etwas sein könnte! Wenn das oben wirklich richtig aussieht, dann habe ich vielleicht den Schlüssel falsch von ihnen oder einige solche, Prost für Ihre Eingabe –

Verwandte Themen