Помогите переписать код с PHP на C#

Узнай цену своей работы

Формулировка задачи:

Народ помогите пожалуйста переделать с PHP на C# на $_GET внимание можно не обращать.
Листинг программы
  1. $hexchal = pack ("H32", $_GET['chal']);
  2. $newchal = $uamsecret ? pack("H*", md5($hexchal . $uamsecret)) : $hexchal;
  3. $response = md5("\0" . $_GET['password'] . $newchal);
  4. $newpwd = pack("a32", $_GET['password']);
  5. $pappassword = implode ('', unpack("H32", ($newpwd ^ $newchal)));

Решение задачи: «Помогите переписать код с PHP на C#»

textual
Листинг программы
  1. string chal = "2121212121212122"; // 16 символов
  2. string uamsecret = null;
  3. string password = "!Пар0л-ь";
  4.  
  5. string hexchal = pack("H32", chal);
  6. string newchal = uamsecret != null ? pack("H*", md5(hexchal + uamsecret)) : hexchal;
  7. byte[] response = md5("\0" + password + newchal);
  8.  
  9. byte[] newpwd = Encoding.GetEncoding("windows-1251").GetBytes(password).Concat(Enumerable.Repeat((byte)0, 32)).Take(32).ToArray();
  10. byte[] newchal_buf = Encoding.GetEncoding("windows-1251").GetBytes(newchal).SelectMany(b => new byte[] { (byte)((b & 0xF0)>>4), (byte)(b & 0xF)}).ToArray();
  11. StringBuilder sbPappassword = new StringBuilder(32);
  12. for (int i=0; i<32; i++)
  13. {
  14.     sbPappassword.AppendFormat("X2", newpwd[i] ^ newchal_buf[i]);
  15. }
  16. string pappassword = sbPappassword.ToString();
  17.  
  18. //...
  19.  
  20. static byte[] md5(string text)
  21. {
  22.     using (var md5prov = new System.Security.Cryptography.MD5CryptoServiceProvider())
  23.     {
  24.         return md5prov.ComputeHash(Encoding.GetEncoding("windows-1251").GetBytes(text));
  25.     }
  26. }
  27.  
  28. static string pack(string format, string value)
  29. {
  30.     switch (format[0])
  31.     {
  32.         case 'H':
  33.             int maxLen = format[1] == '*' ? value.Length : int.Parse(format.Substring(1));
  34.             byte[] buf = new byte[maxLen/2];
  35.             for (int i=0; i<maxLen/2; i+=2)
  36.             {
  37.                 buf[i/2] = Convert.ToByte(value.Substring(i,2), 16);
  38.             }
  39.             return Encoding.GetEncoding("windows-1251").GetString(buf);
  40.            
  41.         case 'a':
  42.             int padWidth = int.Parse(format.Substring(1));
  43.             return value.PadLeft(padWidth, '\0');
  44.     }
  45.    
  46.     return null;
  47. }
  48.  
  49. static string pack(string format, byte[] value)
  50. {
  51.     switch (format[0])
  52.     {
  53.         case 'H':
  54.             int maxLen = format[1] == '*' ? value.Length : int.Parse(format.Substring(1));
  55.             return Encoding.GetEncoding("windows-1251").GetString(value, 0, maxLen);
  56.     }
  57.    
  58.     return null;
  59. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.643 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут