int EncryptLoopCount = 4;
public string BasicEncrypt(string data, string encryptkey)
{
if (string.IsNullOrEmpty(data))
throw (new ArgumentNullException("data"));
if (string.IsNullOrEmpty(encryptkey))
throw (new ArgumentNullException("encryptkey"));
int[] vals = MakeArray(data, true);
int[] keys = MakeArray(encryptkey, false);
for (int t = 0; t < EncryptLoopCount; t++)
{
for (int i = 0; i < vals.Length; i++)
{
int v = vals[i];
int im = (v + i) % 5;
for (int x = 0; x < vals.Length; x++)
{
if (x == i)
continue;
if (x % 5 != im)
continue;
for (int y = 0; y < keys.Length; y++)
{
int k = keys[y];
if (k == 0)
continue;
vals[x] += v % k;
}
}
}
}
return BasicFormat(vals);
}
public string BasicFormat(int[] vals)
{
StringBuilder sb = new StringBuilder();
foreach (int i in vals)
{
if (sb.Length > 0)
sb.Append("-");
sb.Append(i);
}
return sb.ToString();
}
public int[] MakeArray(string str, bool random)
{
int len = (int)Math.Pow(2, Math.Floor(Math.Log(str.Length, 2)) + 1) + 8;
if (len < 32) len = 32;
int[] arr = new int[len];
if (random)
{
Random r = new Random();
for (int i = 0; i < arr.Length; i++)
arr[i] = str[r.Next() % str.Length];
int start = 1 + r.Next() % (len - str.Length - 2);
for (int i = 0; i < str.Length; i++)
arr[start + i] = str[i];
arr[start - 1] = 0;
arr[start + str.Length] = 0;
}
else
{
for (int i = 0; i < arr.Length; i++)
arr[i] = str[i % str.Length];
}
return arr;
}