Потребуется ли клиенту распределение запутанных последовательных номеров заказов, чтобы они выглядели как что-то конкретное?
Если вы не хотите усложнять себя с помощью шифрования, используйте комбинацию перестановки битов с битом случайного засоления (если у вас есть запасные биты / цифры) с наложением XOR поверх некоторой фиксированной константы (или некоторой функции чего-то, что будет доступен в любой момент вместе с запутанным идентификатором заказа, например, customer_id
, который разместил заказ?)
EDIT
Похоже, что все, чего хочет клиент, - это чтобы внешняя сторона не могла определить ход продаж. В этом случае решение перестановки (отображение битов, например, исходный бит 1 отображается на запутанный бит 6, исходный бит 6 отображается на запутанный бит 3 и т. Д.) Должно быть более чем достаточным. Добавьте несколько случайных битов, если вы действительно хотите сделать его более трудным для взлома, при условии, что у вас есть дополнительные биты (например, если исходные номера заказов идут только до 6 цифр, но вам разрешено 8-9 в запутанном номере заказа, затем вы можете использовать 2-3 цифры для случайности перед выполнением битового отображения). Возможно, XOR результат для дополнительного запугивания (любознательная сторона может попытаться сгенерировать два последовательных запутанных заказа, XOR их друг против друга, чтобы избавиться от константы XOR, и затем должна будет определить, какой из ненулевых битов происходит от соли и какие из них поступили с приращением, и действительно ли он получил два последовательных номера заказа или нет ... Он должен был бы повторить это для значительного числа, которое, как он надеется, является последовательными номерами заказа, чтобы взломать его.)
EDIT2
Вы, конечно, можете назначать совершенно случайные числа для идентификаторов обфусцированного порядка, сохранять соответствие в постоянном хранилище (например, в БД) и выполнять обнаружение коллизий, а также удаление обфускации в том же хранилище. Немного излишества, если вы спросите меня, но с положительной стороны, это лучшее, что касается запутывания (и вы реализуете любую функцию распределения, какую пожелает ваша душа, и , вы можете изменить функцию распределения в любое время. )