Dim bytedText As Byte() = System.Text.UTF8Encoding.UTF8.GetBytes(textToHash)
Dim hashValue As Byte() = myhmacsha256.ComputeHash(bytedText)
'Base-64 Encode the results and strip off ending '==', if it exists
result = Convert.ToBase64String(hashValue).TrimEnd("=".ToCharArray())
'set response
Return result
End Function
End Class
-----------------------------------------------
Problemet var, at DIBS systemet påstod at den værdi jeg fik, ikke var korrekt. Jeg fandt flere .Net online-generatorer på nettet, men de gav alle det samme resultat.
Så fandt jeg et Javascript som kunne gøre det samme, og dette retunerer den værdi, som DIBS også kommer frem til.
Det er jo ok, men jeg får så problemer, når jeg skal validere returværdierne fra DIBS, da Javascriptet kører "for sent" til at jeg kan bruge resultatet derfra.
Mit spørgsmål er, hvor .Net og Javascript ikke danne samme streng, når det nu er samme data og key jeg sender til de to, og de begge skulle bruge SHA-256?
Jeg vil også nævne, at jeg har haft kontakt med DIBS supporten, men det ikke har gjort, at jeg er kommet nærmere en forklaring, eller en løsning.
Jeg tænker nu mere på selve kaldet til den JS-funktion, der producerer koden, dvs. du skal klippe fra din kode og plastre det ind her i tråden :-)
Jeg tænker på, om der evt. kunne være nogle standardinstillinger forbundet med kodegenereringen, som din C#-version skal efterleve for at producere det samme resultat.
Hvad sker der efterfølgende med den hash du får ud af det kald (vis også her, gerne noget kode :-))?
Det funktionskald afleverer, såvidt jeg kan forstå dokumentationen, ikke en Base64-streng, men et WordArray og det er ikke umiddelbart sikkert at .NET's metode afleverer i det samme format...
Du kunne evt. prøve at kalde alert(hash.toString(CryptoJS.enc.Base64)); for at se om koden så matcher den som din oprindelige VB-kode returnerede (den hvor du stadig omsætter til Base64). Hvis det er tilfældet, så er det jo nok det sidste trin i din process der er forskellig.
Ved at køre.... CryptoJS.HmacSHA256("loremipsumdolor", "123456"); ... får jeg dette retur: 0eef8c3db5387034be254372ebaa16361d752a1e3b7d0b2b7e1079323a85b4fb
Det ændrer sig ikke, selvom jeg bruger hash.toString(CryptoJS.enc.Base64)
.Net funktionen returnerer denne her... Du+MPbU4cDS+JUNy66oWNh11Kh47fQsrfhB5MjqFtPs
Jeg kan selvfølgelig godt se, at den fra JS er hex, mens den fra .Net ikke er. Men jeg har prøvet at konvertere den fra .Net, og det er stadig ikke det samme.
Jeg er slet ikke sikker på at dette hjælper dig, men der er da nogle kodeeksempler, som tager udgangspunkt i de samme forudsætninger som dine, så der burde være en chance for, at du kunne finde en løsning med udgangpunkt i SO-tråden...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.