Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.42 KB | None | 0 0
  1. using System.Text;
  2. using System.Linq;
  3.  
  4. namespace FutGalaxy.EaApi.Helper
  5. {
  6.     public class HashConverter
  7.     {
  8.         private string _clearPhrase;
  9.  
  10.         private static readonly int[] r1Shifts = new int[] { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22 };
  11.         private static readonly int[] r2Shifts = new int[] { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20 };
  12.         private static readonly int[] r3Shifts = new int[] { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 };
  13.         private static readonly int[] r4Shifts = new int[] { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 };
  14.  
  15.  
  16.         public string Convert(string plainHash)
  17.         {
  18.             _clearPhrase = plainHash.Replace("/^\\s*/", "").Replace("/\\s*$/", "").Replace("/\\s{2,}/", " ");
  19.  
  20.             var x = chunkMessage(_clearPhrase);
  21.  
  22.             var a = 1732584193;
  23.             var b = -271733879;
  24.             var c = -1732584194;
  25.             var d = 271733878;
  26.  
  27.             for (var i = 0; i < x.Count(); i += 16)
  28.             {
  29.                 var tempA = a;
  30.                 var tempB = b;
  31.                 var tempC = c;
  32.                 var tempD = d;
  33.  
  34.                 a = md5_f(a, b, c, d, x[i + 0], r1Shifts[0], -680876936);
  35.                 d = md5_f(d, a, b, c, x[i + 1], r1Shifts[1], -389564586);
  36.                 c = md5_f(c, d, a, b, x[i + 2], r1Shifts[2], 606105819);
  37.                 b = md5_f(b, c, d, a, x[i + 3], r1Shifts[3], -1044525330);
  38.                 a = md5_f(a, b, c, d, x[i + 4], r1Shifts[4], -176418897);
  39.                 d = md5_f(d, a, b, c, x[i + 5], r1Shifts[5], 1200080426);
  40.                 c = md5_f(c, d, a, b, x[i + 6], r1Shifts[6], -1473231341);
  41.                 b = md5_f(b, c, d, a, x[i + 7], r1Shifts[7], -45705983);
  42.                 a = md5_f(a, b, c, d, x[i + 8], r1Shifts[8], 1770035416);
  43.                 d = md5_f(d, a, b, c, x[i + 9], r1Shifts[9], -1958414417);
  44.                 c = md5_f(c, d, a, b, x[i + 10], r1Shifts[10], -42063);
  45.                 b = md5_f(b, c, d, a, x[i + 11], r1Shifts[11], -1990404162);
  46.                 a = md5_f(a, b, c, d, x[i + 12], r1Shifts[12], 1804603682);
  47.                 d = md5_f(d, a, b, c, x[i + 13], r1Shifts[13], -40341101);
  48.                 c = md5_f(c, d, a, b, x[i + 14], r1Shifts[14], -1502002290);
  49.                 b = md5_f(b, c, d, a, x[i + 15], r1Shifts[15], 1236535329);
  50.  
  51.                 a = md5_g(a, b, c, d, x[i + 1], r2Shifts[0], -165796510);
  52.                 d = md5_g(d, a, b, c, x[i + 6], r2Shifts[1], -1069501632);
  53.                 c = md5_g(c, d, a, b, x[i + 11], r2Shifts[2], 643717713);
  54.                 b = md5_g(b, c, d, a, x[i + 0], r2Shifts[3], -373897302);
  55.                 a = md5_g(a, b, c, d, x[i + 5], r2Shifts[4], -701558691);
  56.                 d = md5_g(d, a, b, c, x[i + 10], r2Shifts[5], 38016083);
  57.                 c = md5_g(c, d, a, b, x[i + 15], r2Shifts[6], -660478335);
  58.                 b = md5_g(b, c, d, a, x[i + 4], r2Shifts[7], -405537848);
  59.                 a = md5_g(a, b, c, d, x[i + 9], r2Shifts[8], 568446438);
  60.                 d = md5_g(d, a, b, c, x[i + 14], r2Shifts[9], -1019803690);
  61.                 c = md5_g(c, d, a, b, x[i + 3], r2Shifts[10], -187363961);
  62.                 b = md5_g(b, c, d, a, x[i + 8], r2Shifts[11], 1163531501);
  63.                 a = md5_g(a, b, c, d, x[i + 13], r2Shifts[12], -1444681467);
  64.                 d = md5_g(d, a, b, c, x[i + 2], r2Shifts[13], -51403784);
  65.                 c = md5_g(c, d, a, b, x[i + 7], r2Shifts[14], 1735328473);
  66.                 b = md5_g(b, c, d, a, x[i + 12], r2Shifts[15], -1926607734);
  67.  
  68.                 a = md5_h(a, b, c, d, x[i + 5], r3Shifts[0], -378558);
  69.                 d = md5_h(d, a, b, c, x[i + 8], r3Shifts[1], -2022574463);
  70.                 c = md5_h(c, d, a, b, x[i + 11], r2Shifts[2], 1839030562);
  71.                 b = md5_h(b, c, d, a, x[i + 14], r3Shifts[3], -35309556);
  72.                 a = md5_h(a, b, c, d, x[i + 1], r3Shifts[4], -1530992060);
  73.                 d = md5_h(d, a, b, c, x[i + 4], r3Shifts[5], 1272893353);
  74.                 c = md5_h(c, d, a, b, x[i + 7], r3Shifts[6], -155497632);
  75.                 b = md5_h(b, c, d, a, x[i + 10], r3Shifts[7], -1094730640);
  76.                 a = md5_h(a, b, c, d, x[i + 13], r3Shifts[8], 681279174);
  77.                 d = md5_h(d, a, b, c, x[i + 0], r3Shifts[9], -358537222);
  78.                 c = md5_h(c, d, a, b, x[i + 3], r3Shifts[10], -722521979);
  79.                 b = md5_h(b, c, d, a, x[i + 6], r3Shifts[11], 76029189);
  80.                 a = md5_h(a, b, c, d, x[i + 9], r3Shifts[12], -640364487);
  81.                 d = md5_h(d, a, b, c, x[i + 12], r3Shifts[13], -421815835);
  82.                 c = md5_h(c, d, a, b, x[i + 15], r3Shifts[14], 530742520);
  83.                 b = md5_h(b, c, d, a, x[i + 2], r3Shifts[15], -995338651);
  84.  
  85.                 a = md5_i(a, b, c, d, x[i + 0], r4Shifts[0], -198630844);
  86.                 d = md5_i(d, a, b, c, x[i + 7], r4Shifts[1], 1126891415);
  87.                 c = md5_i(c, d, a, b, x[i + 14], r4Shifts[2], -1416354905);
  88.                 b = md5_i(b, c, d, a, x[i + 5], r4Shifts[3], -57434055);
  89.                 a = md5_i(a, b, c, d, x[i + 12], r4Shifts[4], 1700485571);
  90.                 d = md5_i(d, a, b, c, x[i + 3], r4Shifts[5], -1894986606);
  91.                 c = md5_i(c, d, a, b, x[i + 10], r4Shifts[6], -1051523);
  92.                 b = md5_i(b, c, d, a, x[i + 1], r4Shifts[7], -2054922799);
  93.                 a = md5_i(a, b, c, d, x[i + 8], r4Shifts[8], 1873313359);
  94.                 d = md5_i(d, a, b, c, x[i + 15], r4Shifts[9], -30611744);
  95.                 c = md5_i(c, d, a, b, x[i + 6], r4Shifts[10], -1560198380);
  96.                 b = md5_i(b, c, d, a, x[i + 13], r4Shifts[11], 1309151649);
  97.                 a = md5_i(a, b, c, d, x[i + 4], r4Shifts[12], -145523070);
  98.                 d = md5_i(d, a, b, c, x[i + 11], r4Shifts[13], -1120210379);
  99.                 c = md5_i(c, d, a, b, x[i + 2], r4Shifts[14], 718787259);
  100.                 b = md5_i(b, c, d, a, x[i + 9], r4Shifts[15], -343485551);
  101.                 b = md5_i(b, c, d, a, x[i + 9], r4Shifts[15], -343485551);
  102.  
  103.                 a = add(a, tempA);
  104.                 b = add(b, tempB);
  105.                 c = add(c, tempC);
  106.                 d = add(d, tempD);
  107.             }
  108.  
  109.             return numToHex(a) + numToHex(b) + numToHex(c) + numToHex(d);
  110.         }
  111.  
  112.         private string numToHex(int num)
  113.         {
  114.             var sb = new StringBuilder();
  115.             var hex_chr = "0123456789abcdef";
  116.             for (var j = 0; j <= 3; j++)
  117.             {
  118.                 sb.Append(hex_chr[((num >> (j * 8 + 4)) & 0x0F)]);
  119.                 sb.Append(hex_chr[(num >> (j * 8)) & 0x0F]);
  120.             }
  121.  
  122.             return sb.ToString();
  123.         }
  124.  
  125.         private int md5_i(int a, int b, int c, int d, int x, int s, int t)
  126.         {
  127.             return cmn(c ^ (b | (~d)), a, b, x, s, t);
  128.         }
  129.  
  130.         private int md5_h(int a, int b, int c, int d, int x, int s, int t)
  131.         {
  132.             return cmn(b ^ c ^ d, a, b, x, s, t);
  133.         }
  134.  
  135.         private int md5_g(int a, int b, int c, int d, int x, int s, int t)
  136.         {
  137.             return cmn((b & d) | (c & (~d)), a, b, x, s, t);
  138.         }
  139.  
  140.         private int md5_f(int a, int b, int c, int d, int x, int s, int t)
  141.         {
  142.             return cmn((b & c) | ((~b) & d), a, b, x, s, t);
  143.         }
  144.  
  145.         private int cmn(int q, int a, int b, int x, int s, int t)
  146.         {
  147.             return add(bitwiseRotate(add(add(a, q), add(x, t)), s), b);
  148.         }
  149.  
  150.         private int add(int x, int y)
  151.         {
  152.             var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  153.             var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  154.             return (msw << 16) | (lsw & 0xFFFF);
  155.         }
  156.  
  157.         private int bitwiseRotate(int x, int c)
  158.         {
  159.             //var unsigned = x < 0 ? x*(-1) : x ;
  160.  
  161.             return (x << c) | (int)((uint)x >> (32 - c));
  162.         }
  163.  
  164.         private int[] chunkMessage(string clearPhrase)
  165.         {
  166.             var nblk = ((clearPhrase.Length + 8) >> 6) + 1;
  167.             var blks = new int[nblk * 16];
  168.             var i = 0;
  169.  
  170.             for (i = 0; i < nblk * 16; i++)
  171.             {
  172.                 blks[i] = 0;
  173.             }
  174.             for (i = 0; i < clearPhrase.Length; i++)
  175.             {
  176.                 blks[i >> 2] |= clearPhrase.Substring(i, 1).ToCharArray()[0] << ((i % 4) * 8);
  177.             }
  178.  
  179.             blks[i >> 2] |= 0x80 << ((i % 4) * 8);
  180.             blks[nblk * 16 - 2] = clearPhrase.Length * 8;
  181.  
  182.             return blks;
  183.         }
  184.     }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement