[После написания этого я понял, что я заменяю уже частично расшифрованное сообщение, поэтому я, кажется, нашел ошибку, но теперь я не могу понять, как заменить буквы по одной без используя кучу операторов if-else, которые кажутся очень неэффективными. Есть предложения?]
Часть зашифрованного сообщения
THEXMUNITIONSXFACTORYXREPORTEDXDAMAGEDXINXBOMBINGXRAIDXSTOPXKEEPXLOWXPROFILEXSTOPXURGENTXMESSAGESXCOMPROMISEDXSWITCHXTOXENCRYPTEDXURGENTXSTOPASJHXBLDZBLVZJXWZBHDFFVMYHSJYDMBJDOSUBGJDKBFSPWBHDMJSHJBAYJXBSRWMJBDZSMRWBGJDKBSNDYOBJXWBDJXWZBHDMJSHJBSJBSIIBHDGJGBGJDKBSHJYNSJWBDKWZSJYDMBEIVWBGKDDMBGJDKBZWKDZJBDMBJXWBKDIYHWBGJSJYDMBGJDKBSHJYNSJWBDKWZSJYDMBMDZJXADDOGBGJDKBZWKDZJBDMBUDVZBGJSJVGBGJDKBSBESJJIWGXYKBGWWMBOWKSZJYMRBLZDFBOWWKBXSZEDVZBGJDKBMWBJBFWWJYMRBSJBCICCBTVIVBJDMYRXJBJXWBKSZPBVMOWZBJXWBDSPBGJDKBPWWKBIDABKZDLYIWBGJDKBOYGZWRSZOBISGJBFWGGSRWBGJDKBYMNWGJYRSJWBZVFDVZGBDLBGJZYPWGBGJDKBPWWKBIDABKZDLYIWBGJDKBVMPMDAMBNWGGWIBYGBODHPWOBSJBOWWKBXSZEDVZBGJDKBJXWBODRBJZSYMWZBFSUBEWBODVEIWBSRWMJBWBWZHYGWBHSVJYDMBGJDKBDKWZSJYDMBMDZ
Мне нужно расшифровать сообщение путем замены ключа. Мне дают упорядоченную строку по тому, как часто каждая буква появляется в ранее незашифрованных сообщениях, а затем мне говорят, что для расшифровки все, что нужно сделать, это заменить самую частую букву в зашифрованном тексте самой частой в прошлые незашифрованные тексты и т. д.
Мне также сказали игнорировать первые 141 символ, поскольку они уже были расшифрованы.
Как видно из кода выше, я сделал следующее:
Скопируйте зашифрованную строку из 142-го символа и далее, чтобы иметь дело только с битом, который все еще зашифрован
Создать словарь с буквами и числом их встреч в сообщении
Преобразовать этот словарь в список и отсортировать его в порядке убывания
Наконец, я перебираю «частотную строку» (которая, по сути, является ключом, который мне дали, указывающий, как часто появляются буквы в незашифрованных сообщениях), и сопоставляю его с буквами в сообщении в порядке их частоты список. И используйте строковый метод replace () замените их
encrypted = message [142:]
quenString = "XTOEASRINPDCLHUMGBFYWVKZJQ"
print (orderChars) # для отладки
def counter(chars):
d = {}
for char in message:
d[char] = d.get(char,0) + 1
return d
charCount = counter(message)
def sortChars(charCount):
orderedChars = []
for k in charCount:
orderedChars.append([charCount[k],k])
orderedChars = sorted(orderedChars, reverse=True)
return orderedChars
orderedChars = sortChars(charCount)
def charMatch(orderedChars, frequencyString):
global encrypted
i=-1
for char in frequencyString:
i+=1
print(orderedChars[i][1]+"->"+char,end=" $ ") #for debuging purposes
encrypted = encrypted.replace(orderedChars[i][1],char)
encrypted = encrypted.replace("X"," ")
print()
print()#for debuging purposes
print(encrypted) #for debuging purposes
return encrypted
print()
charMatch(orderedChars,frequencyString)
OUTPUT
[[1449, «B»], [830, «J»], [784, «D»], [748, «W»], [578, «S»], [530, «G» ], [469, 'Z'], [413, 'Y'], [403, 'M'], [343, 'K'], [251, 'O'], [233, 'X'], [232, 'H'], [229, 'I'], [191, 'V'], [190, 'F'], [145, 'E'], [142, 'R'], [111 , 'L'], [95, 'U'], [86, 'A'], [77, 'N'], [70, 'P'], [22, 'T'], [11, ' C '], [6,' Q ']]
B-> X $ J-> T $ D-> O $ W-> E $ S-> A $ G-> S $ Z-> R $ Y-> I $ M-> N $ K- > P $ O-> D $ X-> C $ H-> L $ I-> H $ V-> U $ F-> M $ E-> G $ R-> B $ L-> F $ U- > Y $ A-> W $ N-> V $ P-> K $ T-> Z $ C-> J $ Q-> Q $
WZFJJFDBJFYBZJGBJFDMMYVHFWZHDVJZDDWYJSZDKJMWKGJFDVZWFZJWHZJJWBGVZJDBWVBGJSZDKJWVDHDJZJGJDZJGBJFDVZWFZJWZJWHHJFDSZSJSZDKJWFZHVWZGJDKGBWZHDVJGHYGJSKDDVJSZDKJBGKDBZJDVJZJGJKDHHFGJSZWZHDVJSZDKJWFZHVWZGJDKGBWZHDVJVDBZJWDDDSJSZDKJBGKDBZJDVJYDYBJSZWZYSJSZDKJWJGWZZHGSJHKJSGGVJDGKWBZHVBJFBDMJDGGKJJWBGDYBJSZDKJVGJZJMGGZHVBJWZJJHJJJZYHYJZDVHBJZJZJGJKWBKJYVDGBJZJGJDWKJSZDKJKGGKJHDWJKBDFHHGJSZDKJDHSBGBWBDJHWSZJMGSSWBGJSZDKJHVVGSZHBWZGJBYMDYBSJDFJSZBHKGSJSZDKJKGGKJHDWJKBDFHHGJSZDKJYVKVDWVJVGSSGHJHSJDDFKGDJWZJDGGKJJWBGDYBJSZDKJZJGJDDBJZBWHVGBJMWYJGGJDDYGHGJWBGVZJGJGBFHSGJFWYZHDVJSZDKJDKGBWZHDVJVDBZJWDDDSJJWSJGGGVJSYFFGSSFYHJSZDKJVGJZJMGGZHVBJWZJKBJJJZYHYJZDMDBBDWJWZJZJGJDHDJHHDVJSZDKJDDJVDZJMWKGJFDVZWFZJYVZHHJZJGJYSYWHJDWYJSZDKJDDJVDZJMWKGJ