Насколько сложно / легко декодировать пользовательскую базовую кодировку 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/