Неправильно декодирует строку

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

def fastPowNum(num, powNum, mod):
    result = 1
    while powNum > 0:
        if powNum % 2 != 0:
            result = (result * num) % mod
        powNum = powNum >> 1
        num = (num * num) % mod
    return result
def getM(text): 
    return str(bin(int.from_bytes(bytes(text, 'ansi'), 'big')))[2:]
d = 1204620836527408543443249799106659279984003732233772437708705926276228222885665930105385054100754983178627649836768465968687298184941883140043659401442073
n = 3439861722083822174054613315226793721732099546489772405457082478366562814240296678912164864674998750773751128066121724078154198885910020266775789422277981
e = 257
L = len(str(bin(int(n)))[2:])
arrC = []
text = "почему опять не работает?"
M = getM(text)
textLen = len(M)
blockLen = int(L / 4)
for i in range(0, textLen, blockLen):
    if i + blockLen > textLen:
        Mi = M[i: textLen]
    else :
        Mi = M[i: i+blockLen]
    Ci = fastPowNum(int(Mi, 2), e , n)
    Mi = fastPowNum(Ci, d, n)
    print(str(Mi.to_bytes((Mi.bit_length() + 7) // 8, 'big').decode('ansi')))

В результате получаем

wч{тцyђwwящ~vтђ
работает?

Не могу понять, что идет не так. Подскажите, пожалуйста


Ответы (0 шт):