Как стать автором
Обновить

Спасите пароль: сказочная реализация схемы разделения секрета Шамира на Python

Время на прочтение6 мин
Количество просмотров15K
Всего голосов 40: ↑40 и ↓0+40
Комментарии4

Комментарии 4

У короля был ужасный секрет:

У меня для короля есть ещё один ужасный секрет:

secret = int.from_bytes(«terrible secret».encode(«utf-8»), 'big')

Так, по-моему, будет на несколько строчек покороче.
Так будет на много порядков побыстрее.

In [2]: timeit secret = int_from_bytes("terrible secret".encode("utf-8"))
1.59 µs ± 30.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [3]: timeit secret = int.from_bytes("terrible secret".encode("utf-8"), 'big')
202 ns ± 3.77 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Согласен. Не стал об этом упоминать, так как показалось это очевидным.

Только не на много порядков, а на один — в восемь раз.
Спасибо, отличная статья (да понял, что перевод). Пара правок:

Однако он верил, что трое из них не нарушат его волю:

Причем тут последующий код, с которым этот абзац связывает двоеточие?
Король — человек достаточно занятой, поэтому он использовал пакет арифметики из PyPI.

а вот тут двоеточие и тот код бы подошли.
secret < P
TRUE

True. И лучше какие-нибудь символы >>> означающие, что первое это команда, а второе ответ на нее.
И вместо секрета решил использовать его сравнение по модулю P:

«вместо секрета… использовать… сравнение»? Если одно число меньше другого, то по модулю будет оно же.
secret = mod.Mod(secret, P)

Судя по тому как импортирован Mod — просто secret = Mod(secret, P)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий