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;
}