Распространение секрета Шамира (Python) – невозможно вернуть исходный секрет, если его длина > 10. ⇐ Python
Распространение секрета Шамира (Python) – невозможно вернуть исходный секрет, если его длина > 10.
Каждый раз, когда я пытался вернуть исходное значение, я получал «Hello World►/», «Hello Worlc», «Hello World►/», «Hello Worle♦S» или некоторые другие варианты. Я следую этому сайту за реализацией разделения и реконструкции: https://www.geeksforgeeks.org/implement ... in-python/. Это мой код:
импортировать случайным образом из ячейки математического импорта из десятичного импорта Десятичный FIELD_SIZE = 10**5 защита реконструкции_секрета (доли): суммы = десятичные (0) для j, Share_j в перечислении (акции): xj, yj = доля_j продукт = Десятичный(1) для i, Share_i в перечислении (акции): xi, _ = доля_i если я != j: # Проверяем, равно ли xi xj если xi == xj: продолжать prod *= Decimal(xi) / (Decimal(xi) - Decimal(xj)) произведение *= Десятичное число (yj) суммы += продукт вернуть int(раунд(суммы)) def полином (x, коэффициенты): точка = 0 для коэффициента_индекс, коэффициент_значение в перечислении (коэффициенты[::-1]): точка += x ** индекс_коэффициента * значение_коэффициента точка возврата def coeff(t, секрет): coeff = [random.randrange(0, FIELD_SIZE) для _ в диапазоне(t - 1)] coeff.append(секрет) возвратный коэффициент defgenerate_shares(n, m, secret): коэффициенты = coeff(m, секрет) акции = [] для i в диапазоне (1, n+1): x = случайный.randrange(1, FIELD_SIZE) Shares.append((x, полином(x, коэффициенты))) вернуть акции если __name__ == '__main__': # (3,5) схема совместного использования т, п = 3, 5 tt = "Привет, мир!!!" секрет = int.from_bytes(tt.encode(), byteorder='big') # Фаза I: Создание акций акции =gener_shares(n, t, секрет) # Фаза II: Тайная реконструкция пул = случайный.выборка(акции, т) # Восстановить секрет r_secret_int = реконструкция_секрета (пул) r_secret_string = r_secret_int.to_bytes( (r_secret_int.bit_length() + 7) // 8, byteorder='big').decode('utf-8', 'игнорировать') print("Восстановленный секрет:", r_secret_string) Я проконсультировался с чатгптом, он предложил изменить алгоритм для реконструкции_секрета(shares) или увеличить FIELD_SIZE, но код, который он дал, секрет либо вернулся пустым, либо какая-то тарабарщина.
Каждый раз, когда я пытался вернуть исходное значение, я получал «Hello World►/», «Hello Worlc», «Hello World►/», «Hello Worle♦S» или некоторые другие варианты. Я следую этому сайту за реализацией разделения и реконструкции: https://www.geeksforgeeks.org/implement ... in-python/. Это мой код:
импортировать случайным образом из ячейки математического импорта из десятичного импорта Десятичный FIELD_SIZE = 10**5 защита реконструкции_секрета (доли): суммы = десятичные (0) для j, Share_j в перечислении (акции): xj, yj = доля_j продукт = Десятичный(1) для i, Share_i в перечислении (акции): xi, _ = доля_i если я != j: # Проверяем, равно ли xi xj если xi == xj: продолжать prod *= Decimal(xi) / (Decimal(xi) - Decimal(xj)) произведение *= Десятичное число (yj) суммы += продукт вернуть int(раунд(суммы)) def полином (x, коэффициенты): точка = 0 для коэффициента_индекс, коэффициент_значение в перечислении (коэффициенты[::-1]): точка += x ** индекс_коэффициента * значение_коэффициента точка возврата def coeff(t, секрет): coeff = [random.randrange(0, FIELD_SIZE) для _ в диапазоне(t - 1)] coeff.append(секрет) возвратный коэффициент defgenerate_shares(n, m, secret): коэффициенты = coeff(m, секрет) акции = [] для i в диапазоне (1, n+1): x = случайный.randrange(1, FIELD_SIZE) Shares.append((x, полином(x, коэффициенты))) вернуть акции если __name__ == '__main__': # (3,5) схема совместного использования т, п = 3, 5 tt = "Привет, мир!!!" секрет = int.from_bytes(tt.encode(), byteorder='big') # Фаза I: Создание акций акции =gener_shares(n, t, секрет) # Фаза II: Тайная реконструкция пул = случайный.выборка(акции, т) # Восстановить секрет r_secret_int = реконструкция_секрета (пул) r_secret_string = r_secret_int.to_bytes( (r_secret_int.bit_length() + 7) // 8, byteorder='big').decode('utf-8', 'игнорировать') print("Восстановленный секрет:", r_secret_string) Я проконсультировался с чатгптом, он предложил изменить алгоритм для реконструкции_секрета(shares) или увеличить FIELD_SIZE, но код, который он дал, секрет либо вернулся пустым, либо какая-то тарабарщина.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно записать данные в BigQuery при использовании секрета Databricks.
Anonymous » » в форуме Python - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Невозможно записать данные в BigQuery при использовании секрета Databricks.
Anonymous » » в форуме Python - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-