public static byte[] Get410Password(string password, byte[] seedBytes) { SHA1Hash hash = new SHA1Hash(); password = password.Replace(" ", "").Replace("\t", ""); byte[] bytes = Encoding.Default.GetBytes(password); byte[] sourceArray = hash.ComputeHash(bytes); byte[] destinationArray = new byte[0x18]; Array.Copy(seedBytes, 0, destinationArray, 0, 4); Array.Copy(sourceArray, 0, destinationArray, 4, 20); byte[] buffer4 = hash.ComputeHash(destinationArray); byte[] to = new byte[20]; XorScramble(seedBytes, 4, to, 0, buffer4, 20); byte[] buffer6 = new byte[20]; XorScramble(to, 0, buffer6, 0, sourceArray, 20); return buffer6; }
public static byte[] Get411Password(string password, string seed) { if (password.Length == 0) { return new byte[1]; } SHA1Hash hash = new SHA1Hash(); byte[] buffer = hash.ComputeHash(Encoding.Default.GetBytes(password)); byte[] sourceArray = hash.ComputeHash(buffer); byte[] bytes = Encoding.Default.GetBytes(seed); byte[] destinationArray = new byte[bytes.Length + sourceArray.Length]; Array.Copy(bytes, 0, destinationArray, 0, bytes.Length); Array.Copy(sourceArray, 0, destinationArray, bytes.Length, sourceArray.Length); byte[] buffer5 = hash.ComputeHash(destinationArray); byte[] buffer6 = new byte[buffer5.Length + 1]; buffer6[0] = 20; Array.Copy(buffer5, 0, buffer6, 1, buffer5.Length); for (int i = 1; i < buffer6.Length; i++) { buffer6[i] = (byte)(buffer6[i] ^ buffer[i - 1]); } return buffer6; }
public static byte[] GetOld410Password(string password, byte[] seedBytes) { long[] numArray = Hash(password); int[] numArray2 = getSaltFromPassword(string.Format(CultureInfo.InvariantCulture, "{0,8:X}{1,8:X}", new object[] { numArray[0], numArray[1] })); byte[] src = new byte[20]; int num = 0; for (int i = 0; i < 2; i++) { int num3 = numArray2[i]; for (int k = 3; k >= 0; k--) { src[k + num] = (byte)(num3 % 0x100); num3 = num3 >> 8; } num += 4; } SHA1Hash hash = new SHA1Hash(); byte[] dst = new byte[8]; Buffer.BlockCopy(src, 0, dst, 0, 8); byte[] buffer3 = hash.ComputeHash(dst); byte[] to = new byte[20]; XorScramble(seedBytes, 4, to, 0, buffer3, 20); string p = Encoding.Default.GetString(to, 0, to.Length).Substring(0, 8); long[] numArray3 = Hash(password); long[] numArray4 = Hash(p); long max = 0x3fffffffL; byte[] buffer5 = new byte[20]; int num6 = 0; int length = p.Length; int num8 = 0; long num9 = (numArray3[0] ^ numArray4[0]) % max; long num10 = (numArray3[1] ^ numArray4[1]) % max; while (num6++ < length) { buffer5[num8++] = (byte)(Math.Floor((double)(rand(ref num9, ref num10, max) * 31.0)) + 64.0); } byte num11 = (byte)Math.Floor((double)(rand(ref num9, ref num10, max) * 31.0)); for (int j = 0; j < 8; j++) { buffer5[j] = (byte)(buffer5[j] ^ num11); } return buffer5; }