Зашифруйте текст с помощью числа

Euler проекта

Я недавно начал решать некоторые Euler загадки Проекта. Я нашел дискуссионный форум в сайте немного печальным (большинство обсуждений закрывается и плохо поточное), Таким образом, я решил опубликовать свои решения Python на панели запуска для обсуждения.

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

Моя проблема Шифрования

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

Для предотвращения атак перебором моих ответов я хочу найти алгоритм шифрования, который значительно занимает много времени (несколько секунд) для выполнения.

Вы знаете какой-либо такой алгоритм? Я представил бы себе пакет Python, который я могу присоединить к коду по внешней программе, которая могла бы иметь проблемы мобильности.

Спасибо,

Adam

5
задан Zero Piraeus 22 January 2015 в 18:27
поделиться

7 ответов

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

PBKDF2 - это стандартизированный алгоритм получения ключей на основе пароля, определенный в PKCS # 5. По сути, вы можете настроить параметр «итераций» так, чтобы получение ключа из пароля (ответ на проблему Эйлера) занимало несколько секунд. Затем ключ можно использовать для любого распространенного алгоритма симметричного шифрования, например AES-128.

Это имеет то преимущество, что большинство криптографических библиотек уже поддерживают PBKDF2. Фактически, вы можете найти почтовые клиенты, которые поддерживают шифрование на основе пароля для сообщений S / MIME. Затем вы можете просто опубликовать S / MIME, и люди смогут читать его с помощью почтового клиента. К сожалению, мой почтовый клиент (Thunderbird) поддерживает только шифрование с открытым ключом.

4
ответ дан 14 December 2019 в 08:43
поделиться

Просто используйте тройной DES и используйте разные ключи для каждой итерации, используйте номер для генерации каждого из 3 ключей. Увеличьте длину ключа текстом, и все будет хорошо.

Tripple DES был разработан для повышения эффективности против грубой силы.

Это не самый безопасный вариант в мире, но я буду держать большинство взломщиков в страхе.

0
ответ дан 14 December 2019 в 08:43
поделиться

Да, это можно сделать практически с любым симметричным алгоритмом шифрования: например, DSA или AES; просто используйте целое число в качестве ключа, дополните ключ до необходимой длины ключа алгоритма шифрования и используйте этот ключ для расшифровки ответа.

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

В этом вопросе , кажется, есть несколько примеров библиотек для использования с python.

1
ответ дан 14 December 2019 в 08:43
поделиться

Простейшим подходом было бы хэширование ответа с использованием безопасной хеш-функции, такой как SHA-1, а затем предоставление хеш-функции, чтобы пользователи могли проверить свой ответ. Если вы хотите усложнить брутфорс, выполните итерацию хэша - например, предоставьте результат n рекурсивных применений SHA1, где n - некоторый параметр, который вы выбираете, чтобы затруднить брутфорс.

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

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

0
ответ дан 14 December 2019 в 08:43
поделиться

Если вам нужна простая в использовании и распространении процедура шифрования, я рекомендую p3.py Пола Рубина. Она, вероятно, слишком быстрая для того, насколько она безопасна, но поскольку вам, похоже, нужно преодолеть препятствие, а не возвести крепостную стену, она может быть хорошим выбором для ваших целей.

Вы также можете рассмотреть rijndael.py, который является реализацией AES и работает медленнее, чем p3.py.

0
ответ дан 14 December 2019 в 08:43
поделиться

Я думаю, что Инь Чжу описал социальный аспект, а Вихрь - технический. Используя ваш предпочтительный подход:

python decrypt.py --problem=123 --key=1234567

номер ключа легко доступен Google, и даже без этого, пробить миллион ключей (предполагая, что средняя длина ключа в 5 десятичных цифр дает менее 20 бит ключа) довольно быстро. Если бы я хотел быть более умным, я мог бы использовать предположения о простом тексте (например, import, for) и значительно сократить пространство поиска.

Для всех этих проблем, вероятно, лучше использовать что-то действительно сложное, например:

>>> print codecs.getencoder('rot_13')('import codecs')[0]
vzcbeg pbqrpf 

И если вам нужно решение проблемы 123 проекта Эйлера, вам придется выбить его из меня...

2
ответ дан 14 December 2019 в 08:43
поделиться

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

Между прочим, есть много мест, где можно найти ответы на Project Euler, например Haskell отвечает , Clojure отвечает , F # отвечает . Если кому-то нужен только ответ на вопрос, он / она может просто запустить программу. При условии, что Python настолько популярен, Google "Python Euler xx" предоставит вам множество блогов, решающих конкретную проблему.

0
ответ дан 14 December 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: