Я понимаю, что это старый пост, но я подумал, что может быть полезно опубликовать мою технику для запутывания целочисленных идентификаторов
Минусы: использует более 8 символов, подходит только для значений идентификаторов до 33 миллионов
Плюсы: не требуется ключ для удаления запутывания, дружественный URL / cookie, генерирует разные значения каждый раз, что затрудняет его взлом, отсутствие коллизий, включает функцию контрольной суммы для устранения случайных / грубых попыток взлома Одна из проблем, которые не рассматриваются в этом посте, это люди, пытающиеся "почистить" ваш сайт. Если я вижу URL, заканчивающийся на id = 123, я знаю, что могу попробовать id = 124 и т. д. ... для получения дополнительных данных, поэтому некоторые примеры XOR, вероятно, не очень хорошая идея)
Я бы порекомендовал немного подправить это (что я и сделал для себя), так как не думаю, что вам когда-либо стоит использовать публично опубликованную технику запутывания, но это хорошее место для начала.
Удачного кодирования!
public static string ObfuscateId(int id)
{
try
{
string rtn;
int sid = id + 279;
int xm = sid * 3;
int xl = xm.ToString().Length + 10;
string sc = xl.ToString().Substring(1, 1);
string fc = xl.ToString().Substring(0, 1);
string csum = sid.ToString().Substring(sid.ToString().Length - 3);
rtn = Guid.NewGuid().ToString().Replace("-", "").ToLower();
rtn = sc + rtn.Substring(2, 26) + fc;
rtn = rtn.Remove(4, 3).Insert(4, csum);
rtn = rtn.Remove(xl, (xl - 10)).Insert(xl, xm.ToString());
rtn = rtn.Replace('1', 'g');
rtn = rtn.Replace('2', 'h');
rtn = rtn.Replace('3', 'i');
rtn = rtn.Replace('4', 'w');
rtn = rtn.Replace('5', 'y');
rtn = rtn.Replace('6', 'u');
rtn = rtn.Replace('7', 'z');
rtn = rtn.Replace('8', 'l');
rtn = rtn.Replace('9', 'v');
rtn = rtn.Replace('0', 'n');
rtn = rtn.Replace('c', 'j');
rtn = rtn.Replace('d', 'p');
rtn = rtn.Replace('f', 'q');
return rtn.ToUpper();
}
catch
{
return "ERROR BAD ID";
}
}
public static int DeObfuscateId(string obtxt)
{
try
{
string rtn;
int id;
rtn = obtxt.ToLower();
rtn = rtn.Replace('g', '1');
rtn = rtn.Replace('h', '2');
rtn = rtn.Replace('i', '3');
rtn = rtn.Replace('w', '4');
rtn = rtn.Replace('y', '5');
rtn = rtn.Replace('u', '6');
rtn = rtn.Replace('z', '7');
rtn = rtn.Replace('l', '8');
rtn = rtn.Replace('v', '9');
rtn = rtn.Replace('n', '0');
rtn = rtn.Replace('j', 'c');
rtn = rtn.Replace('p', 'd');
rtn = rtn.Replace('q', 'f');
string sc = rtn.Substring(0, 1);
string fc = rtn.Substring(rtn.Length - 1);
int xl = int.Parse(fc + sc);
int mv = int.Parse(rtn.Substring(xl, (xl - 10)));
int sid = mv / 3;
id = sid - 279;
string csum = sid.ToString().Substring(sid.ToString().Length - 3);
string xsum = rtn.Substring(4, 3);
if (csum!=xsum)
{
return -99999;
}
return id;
}
catch
{
return -99999;
}
}
}