Эффективный способ сопоставить числа от 1 до 1 псевдослучайным образом? - PullRequest
0 голосов
/ 11 марта 2020

Я не хочу возвращать необработанные идентификаторы пользователей во внешний интерфейс. Многие люди решают эту проблему, генерируя случайные идентификаторы и проверяя, есть ли они в БД. Я хочу найти способ сопоставления чисел в известном диапазоне от 1 до 1. Таким образом, я все еще могу использовать внутренне автоматически увеличиваемые идентификаторы, но возвращать псевдослучайно сопоставленные идентификаторы во внешний интерфейс.

Я мог бы просто перемешать все числа от 1 до N определенным образом c, но мне интересно, есть ли более эффективный способ.

1 Ответ

0 голосов
/ 11 марта 2020

Вы можете выбрать случайное число и использовать побитовые операции XOR для переключения между идентификаторами внешнего интерфейса и базы данных.

Вероятно, будет легко выполнить обратный инжиниринг, но его очень легко использовать.

Вот пример в JavaScript:

const seed = 123;
const internalIds = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(internalIds.join(','));
const frontIds = internalIds.map(id => id ^ seed);
console.log(frontIds.join(','));
const recoveredIds = frontIds.map(id => id ^ seed);
console.log(recoveredIds.join(','));
...