Насколько сложно / легко декодировать пользовательскую базовую кодировку 62?

Вот что я собираюсь сделать, чтобы скрыть идентификаторы базы данных в постоянных ссылках:

1) XOR идентификатор с длинным секретным ключом

2) Зашифруйте (поверните, переверните, переверните) биты вокруг небольшого числа в целочисленном XOR обратимым образом

3) База 62 кодирует полученное целое число с моей собственной секретной зашифрованной последовательностью всех буквенно-цифровых символов (A-Za-z0-9)

Насколько сложно было бы преобразовать мою кодировку Base 62 обратно в базу 10?

Также Насколько сложно реконструировать весь процесс? (очевидно, без пиков в исходном или скомпилированном коде) Я знаю, что "только XOR" довольно восприимчив к базовому анализу.

РЕДАКТИРОВАТЬ: результат должен быть не более 8-9 символов, 3DES и AES, кажется, производят очень длинные зашифрованные тексты и практически не могут использоваться в URL

Результирующие строки выглядят примерно так:

In [2]: for i in range(1, 11):
    print code(i)
   ...:     
9fYgiSHq
MdKx0tZu
vjd0Dipm
6dDakK9x
Ph7DYBzp
sfRUFaRt
jkmg0hl
dBbX9nHk4
ifqBZwLW
WdaQE630

Как вы можете видеть, 1 выглядит совсем не так, как 2, так что, похоже, он отлично работает для запутывания идентификаторов.

2 ответа

Стандартный совет для тех, кто пытается разработать свою собственную криптографию: "Не надо". Расширенный совет заключается в том, чтобы прочитать " Памятку" Брюса Шнайера для дизайнера шифровальщиков-любителей, а затем не делайте этого.

Вы не первый человек, которому нужно запутывать идентификаторы, поэтому уже есть доступные методы. @CodesInChaos предложил хороший метод выше; Вы должны попробовать это в первую очередь, чтобы увидеть, отвечает ли он вашим потребностям.

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

Если злоумышленнику вашей системы разрешено видеть, что, например, id = 1000 выводит "AAAAAA", а id=1001 - "ABAAA", а id=1002 - "ACAAA", алгоритм может быть легко изменен, и значение из полученного ключа.


Тем не менее, этот вопрос лучше подходит для https://security.stackexchange.com/ или https://crypto.stackexchange.com/

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