2017-02-09 2 views
-1

Я пробовал хэшировать строку в PHP с использованием MD5 и то же самое в C#, но результаты разные, если строка содержит специальные символы. Может ли кто-нибудь объяснить мне, как это сделать?Специальные символы хеша MD5

Вот мой код в C#:

MD5 md5 = new MD5CryptoServiceProvider(); 
//compute hash from the bytes of text 
md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text)); 

//get hash result after compute it 
byte[] result = md5.Hash; 

StringBuilder strBuilder = new StringBuilder(); 
for (int i = 0; i < result.Length; i++) 
{ 
    //change it into 2 hexadecimal digits 
    //for each byte 
    strBuilder.Append(result[i].ToString("x2")); 
} 
return strBuilder.ToString(); 

Моя строка "Samuel2989&*" в виде строки.

Выходы:

PHP: 957915b9c9a8fb65e13fe1dc9a8b86d4

C#: f5ee451f7eb4587da00d4aa31ae1c378

+0

Трудно сказать, почему он отличается от кода PHP. – itsme86

+1

На PHP для меня md5 («Samuel2989 &*"); возвращает то же, что и ваш код C#. –

+0

PHP генерирует правильный хэш MD5 для меня. – ceejayoz

ответ

0

Вы можете попробовать с помощью этого метода, и скажите мне, если он работал для вас?

public static string MD5Hash(string input) 
    { 
     System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); 
     byte[] bs = System.Text.Encoding.UTF8.GetBytes(input); 
     bs = x.ComputeHash(bs); 
     System.Text.StringBuilder s = new System.Text.StringBuilder(); 
     foreach (byte b in bs) 
     { 
      s.Append(b.ToString("x2").ToLower()); 
     } 
     string password = s.ToString(); 
     return password; 
    } 
+0

Правильный символ C# C для этой строки, и PHP генерирует для него тот же хеш. – ceejayoz

+0

Мой ответ не имеет отношения к стороне PHP. @ceejayoz – HGMamaci

+2

@HGMamaci. Дело в том, что проблема OP находится на стороне PHP, поэтому настройка кода C# является бессмысленной. – itsme86

Смежные вопросы