Я пытаюсь написать код RSA на python3.6 в образовательных целях.
Генерация ключей и шифрование сообщений работают нормально, но у меня проблема с расшифровкой. Насколько я понимаю, алгоритм дешифрования M = C d mod n, где M - сообщение, C - зашифрованное сообщение (с использованием открытого ключа получателя), d - закрытый ключ получателя. . Проблема в том, когда d отрицательно, что, по моему опыту, бывает очень часто. Я использую алгоритм с написанием справа налево для модульного возведения в степень, но я не знаю, как заставить его работать с отрицательной экспонентой. Вот мой код для m. е .:
def mod_pow(b, e, m):
if m == 1:
return 0
res = 1
b = b % m
while e > 0:
if e % 2 == 1:
res = (res * b) % m
e = e >> 1
b = (b * b) % m
return res