2017-09-21 4 views
-1

en C# J'essaie d'obtenir une valeur md5 haché d'un mot de passe comme ceci:sortie MD5 PHP ne correspond pas à C# sortie MD5

string sb = textBox2.Text; 
      byte[] asciiBytes = ASCIIEncoding.ASCII.GetBytes(sb); 
      byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes); 
      string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower(); 
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(sb); 
      sb = System.Convert.ToBase64String(plainTextBytes); 

en php je reçois cette valeur en utilisant la commande md5,

echo md5("megusia94"); 

l'entrée dans les deux cas sont les mêmes, encore la sortie en PHP est: d1e44ad921daadaf8defadcd21c8644a tout en C# la sortie est: bWVndXMpYTk0

Que suis-je d ça ne va pas? J'ai cherché ce forum et essayé: MD5 hashing does not match in C# and PHP c# md5 and php md5 not match

+0

** Vous ne devriez pas utiliser [hash de mot de passe MD5] (http://security.stackexchange.com/questions/19906/is-md5-considered-insecure) **. Veuillez utiliser ** les fonctions intégrées de PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html) ** ('password_hash()' et 'password_verify()') pour gérer la sécurité des mots de passe. Si vous utilisez une version de PHP inférieure à 5.5, vous pouvez utiliser 'password_hash()' [pack de compatibilité] (https://github.com/ircmaxell/password_compat). ** Il n'est pas nécessaire ** de [échapper les mots de passe] (http://stackoverflow.com/q/36628418/1011527) ou d'utiliser un autre mécanisme de nettoyage avant le hachage. – GrumpyCrouton

+0

Cela semble être une copie de https://stackoverflow.com/q/5821677/1415724 –

+0

Fred, j'ai essayé la solution à cela aussi ... – pokrak94

Répondre

2

Vous ne comparez pas les deux mêmes choses. Ce que vous comparez est la représentation en base64 de la chaîne d'entrée codée en ASCII avec le hachage MD5 actuel (en représentation HEX) de PHP.

Au lieu de regarder ceci:

byte[] asciiBytes = ASCIIEncoding.ASCII.GetBytes("megusia94"); 
byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes); 
string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower(); 
Console.WriteLine(hashedString); 

Il produit correctement le hachage d1e44ad921daadaf8defadcd21c8644a, qui est le même que celui que vous obtenez de PHP.

+0

Merci cela a fonctionné. Je suis un peu rouillé sur mes compétences en C# en essayant de le rafraîchir. C'était des années depuis ma dernière application écrite avec cette langue. – pokrak94

+0

@ pokrak94 Pas de problème. S'il vous plaît noter également les conseils de GrumpyCrouton et n'utilisez pas ce schéma de hachage dans n'importe quel paramètre lié à la sécurité ;-) C'est juste si très imparfait. – Jens

+0

Ceci est pour une application à la maison que j'ai déjà une version de php, essayant maintenant même en C#. Je ne vais pas le publier ou quoi que ce soit - juste pour la pratique. Merci! – pokrak94

-1

PHP md5:

  • Renvoie le hachage comme un nombre hexadécimal à 32 caractères.

Votre code C#:

  • Retourne le hachage avec un encodage base64.