Utils
XXTeaCrypter.cs
namespace QQ.Framework.Utils
{
public static clast XXTeaCrypter
{
public static byte[] Encrypt(byte[] data, byte[] key)
{
if (data.Length == 0)
{
return data;
}
return ToByteArray(Encrypt(ToUInt32Array(data, true), ToUInt32Array(key, false)), false);
}
public static byte[] Decrypt(byte[] data, byte[] key)
{
try
{
return data.Length == 0
? data
: ToByteArray(Decrypt(ToUInt32Array(data, false), ToUInt32Array(key, false)), true);
}
catch
{
return null;
}
}
public static uint[] Encrypt(uint[] v, uint[] k)
{
var num = v.Length - 1;
if (num < 1)
{
return v;
}
if (k.Length < 4)
{
var array = new uint[4];
k.CopyTo(array, 0);
k = array;
}
var num2 = v[num];
var num9 = v[0];
var num3 = 2654435769u;
var num4 = 0u;
var num5 = 6 + 52 / (num + 1);
while (num5-- > 0)
{
num4 += num3;
var num7 = (num4 >> 2) & 3;
int i;
uint num8;
for (i = 0; i < num; i++)
{
num8 = v[i + 1];
num2 = v[i] += (((num2 >> 5) ^ (num8 > 3) ^ (num2 > 5) ^ (num8 > 3) ^ (num2 > 2) & 3;
int num7;
uint num8;
for (num7 = num; num7 > 0; num7--)
{
num8 = v[num7 - 1];
num2 = v[num7] -= (((num8 >> 5) ^ (num2 > 3) ^ (num8 > 5) ^ (num2 > 3) ^ (num8 > 2 : (data.Length >> 2) + 1;
uint[] array;
if (includeLength)
{
array = new uint[num + 1];
array[num] = (uint) data.Length;
}
else
{
array = new uint[num];
}
num = data.Length;
for (var i = 0; i < num; i++)
{
array[i >> 2] |= (uint) (data[i] > ((i & 3)