Если вы говорите об использовании двух символов для шифрования, это не очень хорошая идея.
Это дает только 65536 возможных вариантов (было упомянуто два символа ASCII, но я буду использовать полный 8-битный октет, поэтому 256 умножается на 256), достаточно просто переустановить это. Во-первых, мы знаем, что каждое значение A
и B
создает уникальную пару C1/C2
, согласно следующей программе, которая не генерирует дубликатов:
lookup = {}
for a in range(256):
for b in range(256):
c1s = a*a + (a+b)*(a+b)
c2s = b*b + (a+b)*(a+b)
lkey = "%d:%d"%(c1s,c2s)
lookup[lkey] = 1
print(len(lookup)) # gives 65536 (256 squared)
Кроме того, так как A
и B
целые числа, так что тоже будет C12
и C22
.
Таким образом, первый шаг заключается в разработке квадратов значений вы данных (поскольку sqrt
является потенциально дорогостоящей операцией), принимая во внимание возможность точечных неточностей плавающими:
c1s = int(c1 * c1 + 0.1)
c2s = int(c2 * c2 + 0.1)
Тогда, просто грубая силу решения:
for a in range(256):
for b in range(256):
if c1s != a*a + (a+b)*(a+b):
continue
if c2s == b*b + (a+b)*(a+b):
print(a,b)
sys.exit(0)
print("No solution")
на моей машине, ища медленным решение (как a
и b
набор до 255), он занимает весь smidgeon за шесть ч undredths секунды.
Но вы должны иметь в виду, что если злоумышленник имеет значения C1/C2
, они также могут быстро получить результаты. И даже если они не делают, факт, что есть только возможности 64K, означает, что они могут попробовать каждое возможное значение чуть более чем на одну четверть часа. Поэтому я бы не использовал этот метод для хранения чего-нибудь ценного в течение очень долгого времени :-)
Вам не нужен Python для решения этой проблемы. Вам нужен кусочек бумаги и немного навыков математики в школе, чтобы преобразовать его в формулы для A и B. После этого вы можете написать эти формулы в Python -> PROFIT! –
На самом деле я пытался решить A и B, но я не мог, поэтому я думаю о цифровом решении. –
Могут ли потенциальные злоумышленники получить доступ к значениям C1/2? Потому что, если вы действительно говорите только об использовании двух символов в качестве ключа, это означает, что (1) вы можете перенаправить решение без какой-либо сложной математики, это займет всего 64 000 с лишним попыток; и (2) так может нападающий. – paxdiablo