Какой простой, но несколько эффективный способ «запутать» числовые значения? - PullRequest
1 голос
/ 15 марта 2012

Допустим, у меня есть таблица базы данных Access, которая имеет 2 столбца: один - идентификатор (от 1 до 20000, последовательно и каждый уникален), а другой - значение (любое число от 0 до 500).

Как скрыть поле Значение (используя идентификатор или не используя идентификатор) простым , но несколько эффективным способом? Я ожидаю чего-то более эффективного, чем запутывание ROT13, но не настолько сложного, что для декодирования требуется более одной строки кода. Декодирование выполняется в коде C #. Запутывание осуществляется через вычисляемое поле в Access.

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

Ответы [ 2 ]

7 голосов
/ 16 марта 2012

Для числа от 0 до 500 шифрование практически бесполезно.

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

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

В-третьих, имея только 501 возможное значение, это значение очень подвержено атаке по словарю, т. Е. Кто-то просто угадывает каждое значение, и в среднем ему нужно только угадать 250 раз. Это меньше, чем просто 3-значный замок на портфеле. Таким образом, шифрование, вероятно, не принесет вам большой пользы.

3 голосов
/ 16 марта 2012

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

b = a % 7 == 0 ? ((a/7)*991) : a % 2 == 0 ? ((a/2)*787) : a * 317

и на другом конце

b = a % 991 == 0 ? ((a/991)*7) : a % 787 == 0 ? ((a/787)*2) : a/317

Обратите внимание, что это очень слабо, но ваши требования исключают любую полезную форму шифрования.

...