Обфускация идентификатора пользователя

Я предполагаю, что это уже спрашивали, но не нашел подходящего ответа здесь, а также не имею времени, чтобы придумать собственное решение...

Если у нас есть таблица user с первичным ключом int identity, то наши пользователи имеют последовательные ID, пока они регистрируются на сайте.

У нас есть публичная страница профиля пользователя на сайте URL:

www.somesite.com/user/1234

где 1234 - фактический ID пользователя. Нет ничего уязвимого в том, чтобы увидеть ID пользователя как таковой, но это дает любому возможность проверить, сколько пользователей зарегистрировано на моем сайте... Ручное увеличение числа в конечном итоге приводит меня к недействительному профилю.

Это основная причина, по которой я хочу сделать обратимое отображение ID на кажущееся случайным число с фиксированной длиной:

www.somesite.com/user/6123978458176573

Можете ли вы указать мне на простой класс, который делает такое отображение? Конечно, важно, чтобы это отображение было просто обратимым, иначе мне пришлось бы сохранять это отображение вместе с данными других пользователей.

Я хочу избежать GUID

GUID медленнее для индексного поиска, потому что они не последовательны, поэтому SQL приходится сканировать весь индекс для поиска конкретного GUID вместо конкретной вычисленной индексной страницы...

Если бы у меня был ID + GUID, то мне всегда нужно было бы получить исходный ID пользователя, чтобы выполнить любую значимую манипуляцию с данными, что опять же снижает скорость...

Математически обратимая целочисленная перестановка кажется самым быстрым решением...

9
задан Robert Koritnik 6 January 2012 в 09:48
поделиться