2017-09-18 2 views
-2

J'ai un problème avec les fonctions MD5 et Base64 en PHP et C#. Quand j'essaie de hacher ma ficelle sans caractères polis c'est ok mais quand j'utilise des caractères polis retournés différents. Comment puis-je réparer cela?Hash différent en PHP et C# en utilisant MD5 et Base64

C#

MD5 md5 = MD5.Create(); 
string hash = Convert.ToBase64String(md5.ComputeHash(Encoding.ASCII.GetBytes(tbPassword.Text))); 

PHP

base64_encode(md5($string, true)); 
+3

Je ne sais pas C#, mais je suppose que 'Encoding.ASCII.' causerait un problème avec les caractères polonais. – chris85

+1

Ce n'est pas ce qui cause le problème, mais pourquoi déranger l'encodage en base64 d'un hachage MD5? – iainn

+0

Pouvez-vous fournir une chaîne qui reproduit le problème? – apokryfos

Répondre

0

C'est parce que vous utilisez des caractères ASCII. Essayez Encoding.UTF8 à la place ou tout autre codage permettant des caractères étendus. Et une autre chose: s'il vous plaît ne pas utiliser MD5 pour les mots de passe. Il a été considéré comme insécurisant pendant des années.

+0

Je ne peux pas changer le code C#, je dois faire quelque chose en PHP. – niesuch

0

Vous pouvez forcer le même encodage en PHP:

base64_encode(md5(mb_convert_encoding($string,"ASCII"), true)); 

Notez que les questions évidentes ici (à la fois le C# et le code PHP) est que vous perdez des informations. L'autre problème évident est que vous faites MD5 sur ce qui semble être un mot de passe. C'est une mauvaise idée.

Voici un exemple de PHP: http://sandbox.onlinephpfunctions.com/code/e21dd185093817217427b6cd4e58a223e6ca3b27

Voici l'exemple C#: http://csharppad.com/gist/b26f07cbf9d53d809490e931e6cfbe1d

+0

Cela ne fonctionne pas. J'ai deux hashes différents. Je sais à ce sujet que MD5 c'est une mauvaise idée mais je travaille sur des vieux projets qui ont des algorithmes sur cette fonction. – niesuch

+0

Cela fonctionne pour l'entrée d'origine que vous avez fournie, à quoi cela échoue-t-il? – apokryfos