Неправильно декодирует строку
Задание, связанная с шифрованием, на входе - строка, которую шифрую и затем дешифрую. Для некоторых строк данный код работает как надо, но иногда выходит совсем другой результат, т.е. исходная строка не восстанавливается.
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тђ
работает?
Не могу понять, что идет не так. Подскажите, пожалуйста