2012-03-30 4 views
0

J'informatique MD5Hash des fichiers pour vérifier si identiques donc j'écrit ce qui suitComputing md5

private static byte[] GetMD5(string p) 
{ 
    FileStream fs = new FileStream(p, FileMode.Open); 
    HashAlgorithm alg = new HMACMD5(); 
    byte[] hashValue = alg.ComputeHash(fs); 
    fs.Close(); 
    return hashValue; 
} 

et de tester si pour le début je l'ai appelé comme

var v1 = GetMD5("C:\\test.mp4"); 
    var v2 = GetMD5("C:\\test.mp4"); 

et du débogueur I valeurs v1 et v2 répertoriées et elles sont différentes !! pourquoi donc ?

+0

sont les refenerences différents ou sont il y a vraiment des octets différents là-dedans? – Carsten

+0

@ CarstenKönig ils sont différents en octets valeur ..les 16 octets sont diff – CnativeFreak

+0

Nous avons besoin de plus de code pour déterminer la raison. –

Répondre

1

Je pense que vous avez fait quelque chose comme:

Console.WriteLine(v1); 
Console.WriteLine(v2); 

ou

Console.WriteLine(v1 == v2); 

Cela montre juste que les valeurs des variables se réfèrent à des réseaux distincts - il ne dit rien sur les valeurs au sein de ces tableaux.

Au lieu de cela, essayez ceci (pour imprimer l'hexagone):

Console.WriteLine(BitConverter.ToString(v1)); 
Console.WriteLine(BitConverter.ToString(v2)) 
+0

Je les ai indiquées à l'aide watcher variable débogueur VS2010 .. ce – CnativeFreak

+2

est parce qu'il est HMACMD5 –

6

C'est parce que vous utilisez HMACMD5, un algorithme de hachage à clé, qui combine une clé à l'entrée pour produire une valeur de hachage. Lorsque vous créez un HMACMD5 via son constructeur par défaut, il utilisera une clé aléatoire à chaque fois, donc les hachages seront toujours différents.

Vous devez utiliser MD5:

private static byte[] GetMD5(string p) 
{ 
    using(var fs = new FileStream(p, FileMode.Open)) 
    { 
    using(var alg = new MD5CryptoServiceProvider()) 
    { 
     return alg.ComputeHash(fs); 
    } 
    } 
} 

J'ai changé le code à utiliser using s ainsi.

+0

erreur Impossible de créer une instance de la classe abstraite ou de l'interface « System.Security.Cryptography.MD5 » – CnativeFreak

+0

doit être nouvelle MD5CryptoServiceProvider(); – CnativeFreak

+0

@CnativeFreak oui, bien sûr - doh - j'oublie toujours que la classe est 'abstract' –

5

De l'HMACMD5 constructor doc:

HMACMD5 est un type d'algorithme de hachage à clé qui est construit à partir de la fonction de hachage MD5 et utilisé en tant que message basé sur le hachage code d'authentification (HMAC). Le processus HMAC mélange une clé secrète avec les données de message, hache le résultat avec la fonction de hachage, mélange cette valeur de hachage avec la clé secrète à nouveau, puis applique la fonction de hachage un deuxième temps . Le hachage de sortie aura une longueur de 128 bits.

Avec ce constructeur, une clé de 64 octets, générée de manière aléatoire, est utilisée.

(Non souligné)

Avec chaque appel à GetMD5(), vous générez une nouvelle clé aléatoire.

Vous pouvez utiliser System.Security.Cryptography.MD5Cng

+0

Merci ... apparemment j'utilise le mal hachage algo j'ai essayé Darkshadw lien qui a dit MD5 md5 = nouveau MD5CryptoServiceProvider(); et ça a marché – CnativeFreak

0

Utilisez ToString() Methode pour obtenir la valeur de l'octet de tableau