2017-04-21 3 views
1

Ich bin ziemlich neu zu C#, aber ich baue eine Konsole-Anwendung, die auf die Marvel-API zugreifen, und ich muss einen MD5-Hash für den API-Aufruf generieren. Nach vielen Recherchen habe ich festgestellt, dass Sie den System.Security.Cryptography-Namespace oder den Windows.Security.Cryptography.Core-Namespace verwenden können, um den Hash zu generieren. Ich versuche zur Zeit, wie so die System.Security.Cryptography Namespace zu verwenden:C# Windows.Security.Cryptography.Core Referenz

public string Hash(string data) 
    { 
     MD5 md5 = MD5.Create(); 
     byte[] toBeHashedBytes = Encoding.ASCII.GetBytes(data); 
     byte[] hash = md5.ComputeHash(toBeHashedBytes); 

     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < hash.Length; i++) 
     { 
      sb.Append(hash[i].ToString()); 
     } 

     return sb.ToString(); 
    } 

Der Hash aus diesem Verfahren erzeugt wird, nicht gültig ist, wenn jedoch das Wunder API übergeben wird. Ich versuche, den Windows.Security.Cryptography.Core-Namespace zu verwenden, aber ich kann nicht finden, welche Referenz benötigt wird. Muss ich nur eine Referenz hinzufügen oder muss ich zuerst eine Baugruppe herunterladen?

ich Windows 10 und Visual Studio 2017

Antwort

3

Das grundlegende Problem besteht darin, dass Sie Bytes in der Basis 10 anstatt hexadezimal kombinieren. Befestigen Sie die append-Zeile wie folgt:

sb.Append(hash[i].ToString("x2")); 

Die Methode gibt dann den richtigen Wert für den Eingang "1abcd1234" von

ffd275c5130566a2916217b101f26150

wie in ihrem documentation beschrieben.

+0

Vielen Dank! Ich wusste, es war etwas sehr Einfaches. Ich muss unbedingt mehr darüber lernen, wie Hashing funktioniert. –

+1

Vermutlich möchten Sie "x2", so dass eine führende 0 geschrieben wird, wenn sie benötigt wird. (Auch "x2" anstelle von "X2" beseitigt die redundante ToLower) – bartonjs

+0

@bartonjs ja, guter Haken. –

0

Windows.Security.Cryptography.Core ist ein Namespace für UWP oder Windows App verwende, ist es nicht für Konsole-Anwendung ist. Sie können es nicht in der Konsolenanwendung verwenden.