Шифрование PHP MD5 / base64 для шифрования C # md5 / base64 - PullRequest
1 голос
/ 14 декабря 2010

Я пытаюсь интегрировать веб-сервис C # ASP.NET в мое PHP-приложение, но есть большая проблемаТо, как веб-служба C # выполняет шифрование, несовместимо с тем, как PHP выполняет шифрование MD5.Я нашел решение для преобразования C # MD5 в PHP MD5, однако я не могу изменить код C #.Есть ли способ изменить способ, которым PHP выполняет шифрование MD5 в соответствии с C #?Шифрование c # работает так:

MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.UTF8.GetBytes(stringToEncrypt);
String myString = Convert.ToBase64String(MD5.ComputeHash(bs));

Ответы [ 4 ]

3 голосов
/ 14 декабря 2010

Поскольку MD5 является опубликованным алгоритмом, реализации в PHP и c # идентичны. Единственным отличием является формат строки последовательности байтов, которую они создают. PHP создает шестнадцатеричную строку, поэтому вам просто нужно преобразовать шестнадцатеричное значение в Base64.

0 голосов
/ 14 декабря 2010

Я понимаю, в чем ваша проблема:

String myString = Convert.ToBase64String(MD5.ComputeHash(bs)); 

сделает строку Base64 из чистого хеша массива MD5.

PHP сначала сделает шестнадцатеричное представление хеша MD5, затемbase64-закодируйте его.

Сначала вы должны получить шестнадцатеричный результат, как описано здесь:

http://blog.stevex.net/c-code-snippet-creating-an-md5-hash-string/

, а затем base64 кодировать строку.

0 голосов
/ 14 декабря 2010

Это проблема кодирования, которая у меня была раньше между PHP и C #.

Если PHP манипулирует строками ISO-8859-1 (что, вероятно, является вашим случаем), вы можете сделать:

md5(utf8_encode($stringToEncrypt))

Лучший способ протестировать - это попробовать очень простую строку с содержимым a-z, которая должна нормально работать независимо от проблем с кодировкой. Это работает, и все это не так, у вас есть проблема с кодировкой.

Вы также можете сделать:

byte[] bs = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(stringToEncrypt);

и

md5($stringToEncrypt)

будет работать просто отлично.

0 голосов
/ 14 декабря 2010

Это может быть проблема с кодировкой.Убедитесь, что ваша версия PHP получает UTF-8 представление строки, примените MD5, затем преобразуйте в строку base 64, и все будет в порядке.

...