Хешид против чистого случайного хэша в обфускации идентификатора

Я пытаюсь запутать идентификаторы в моем приложении Rails, просто потому, что это выглядит немного постыдно, когда вы развертываете приложение, чтобы иметь пользователей с ID: 1,2,3... и также не в курсе, чтобы не угадать размер веб-приложения и его темп роста..

1-й выпуск:

Хешид может быть декодирован, что не относится к реальному хешу (основанному на сильном алгоритме, таком как, например, Bcrypt). Все же хэши - это очень длинные строки, которые сделают мой путь безобразным.

Это компромисс, но я думаю, что я счастлив с хэшами.

Тем не менее, есть ли общие знания о том, как легко декодировать хэш? И это зависит от размера хеша?

2-й выпуск:

одна из моих моделей в конечном итоге достигнет около 1 миллиона записей.

Затем при использовании буквенно-цифровых прописных и строчных букв я получаю 62 возможности для каждой хэш-цифры:

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".size = 62

Тогда 4 цифры дают: 62^4 = 14 776 336 возможностей

Хотя приведенный ниже хеш-код попросил зашифровать номер 90000 вернул 5-значный хеш (?!)

var hashids = new Hashids("whatever salt", 4, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");

var id = hashids.encode(90000);

Возвращенный хешид: PpBAR

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

Тогда моя идея заключалась в том, чтобы обработать по-другому: сгенерировать 4 числа от 0 до 62 и извлечь связанную цифру из этой цепочки: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

Хотя один недостаток: столкновения. Затем я должен проверить в таблице, если этот хэш уже был задан => много времени.

Учитывая мой верхний предел в 1 000 000 и хэш из четырех цифр, можно получить 14 776 336 возможностей. Когда модель достигнет верхнего предела, будет 1 / 14 шанс создать новый хэш и выполнить поиск в новой базе данных.

Что кажется мне приемлемым...

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

Поэтому я хотел бы узнать ваше мнение по этому вопросу: кажется ли это приемлемым? Поиск может занять больше времени, чем генерация уникального хеша с помощью хеш-кода (а для некоторых из них, вероятно, намного дольше, если необходимо выполнить новый поиск)... но в целом я могу иметь более короткие уникальные идентификаторы, чем с хеш-кодами? (И это не может быть декодировано поверх этого..)

РЕДАКТИРОВАТЬ

моя база данных - Postgresql и запросы к базе данных выполняются в Ruby (затем преобразуются в SQL)

0 ответов

Другие вопросы по тегам