2016-07-12 5 views
1

Der Wert von HashData zurückgegeben wird, ist nicht ein MD5-Hash-Beispiel:PCLCrypto MD5 HashAlgorithm

Hashing das "a" immer zurückkehren "0cc175b9c0f1b6a831c399e269772661"

Aber dieser Code gibt immer einen anderen Wert.

private byte[] GetHash(string data)  
{ 
     IHashAlgorithmProvider algoProv = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Md5); 
     byte [] dataTB = Encoding.UTF8.GetBytes(data); 
     return algoProv.HashData(dataTB); 
} 
+2

"aber der Code gibt immer einen anderen Wert" - was meinst du? Beachten Sie, dass Sie nur ein Byte-Array zurückgeben ... Wie sehen Sie den Inhalt dieses Byte-Arrays? Ihre Frage ist im Moment unklar. –

+0

Warum ist der zurückgegebene Wert des Codes nicht derselbe wie der, den ich von der Funktion php md5() bekomme? $ x = md5 ("a"); –

+0

Wiederum wissen wir nicht, was Sie mit dem zurückgegebenen Wert machen, um ihn zu vergleichen. Sie haben uns nicht gesagt, welcher Wert * zurückgegeben wird. Ohne diese Informationen ist es unmöglich, Ihnen zu helfen. –

Antwort

0

Ich habe getestet, um den MD5 Algorithmus aus PCLCrypto und es funktionierte wie erwartet. Immer gedruckt "0cc175b9c0f1b6a831c399e269772661"

for (int i = 0; i< 10; i++) 
{ 
    Debug.WriteLine(ByteArrayToHex((GetHash("a")))); 
} 

public static byte[] GetHash(string data) 
{ 
    IHashAlgorithmProvider algoProv = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Md5); 
    byte[] dataTB = Encoding.UTF8.GetBytes(data); 
    return algoProv.HashData(dataTB); 
} 

//Convert hash to hex 
private static string ByteArrayToHex(byte[] hash) 
{ 
    var hex = new StringBuilder(hash.Length * 2); 
    foreach (byte b in hash) 
     hex.AppendFormat("{0:x2}", b); 

    return hex.ToString(); 
} 
+0

unter welchen Namensraum kann ich MD5Digest() finden? –

+0

Das ist eine sehr, sehr schlechte Idee. Ein MD5-Hash ist * nicht * UTF-8-kodierter Text. Das OP scheint das Ergebnis in hex zu haben, also wäre 'BitConverter.ToString (byte [])' ein besserer Startpunkt. –

+0

Der Text wurde codiert, bevor der Hash berechnet wurde. Ich habe meine Antwort aktualisiert. Bitte sag mir was du denkst. – jzeferino