2014-12-09 3 views
0

Наше задание - взять ключевой файл txt с ключом шифрования, применить его к зашифрованному текстовому файлу для создания расшифрованного файла.Назначение декодирования python

Я не могу заставить дешифровать работать. Любая помощь будет принята с благодарностью!

keycode = {} 

def key(filename): 
    with open("key.txt", "r") as infile: 
     for line in infile: 
      parts = line.split() 
      plain = parts[0] 
      code = parts[1] 
      keycode[plain] = code 

     return keycode 

key("key.txt") 


decrypted_text = [] 
with open ("encrypted.txt" , "r")as infile: 
     for c in infile: 
      if c in keycode: 
       c = keycode[1] 
      decrypted_text.append(c) 

with open("decrypted.txt" , "w") as outfile: 
     for line in decrypted_text: 
      outfile.write(line) 


print "Decrypted.txt has been written." 
+2

Когда вы говорите, что не можете заставить его работать, что вы имеете в виду? Вы получаете исключение? Плохой выход? Если да, укажите подробности (например, ожидаемые и наблюдаемые выходы или трассировка из исключения). – Blckknght

+0

Извините, в закодированном тексте мое имя закодировано. ipmmz Выходной сигнал расшифровки должен быть падающим. Он вернет ipmmz, независимо от того, какие параметры я пытаюсь заставить его посмотреть. Я также попробовал dict.get() и не могу заставить его работать. Ошибок нет, только неправильный вывод. – Holly

+0

Что такое содержимое '" key.txt "'? Как именно должно работать шифрование? – Blckknght

ответ

1

Первой проблемой является for c in infile:. Вы не перебираете string, а file. Чтобы получить содержимое file, вам необходимо вызвать метод File.read().

Вторая проблема: keycode[1], которая получает первый элемент словаря keycode, независимо от его содержимого. keycode[c] - правильный путь.

with open ("encrypted.txt" , "r") as infile: 
    for c in infile.read(): 
     if c in keycode: 
      c = keycode[c] 
     decrypted_text.append(c) 

Это то, что подцепится должен выглядеть следующим образом:

i h 
p o 
m l 
z y 

i подменяется h, p ->o и так далее. Имейте в виду, что индекс словаря чувствителен к регистру, поэтому H отличается от h. И снова, вы повторяете файл, в этом случае вам нужен метод File.readlines() в вашем методе key().

+0

Это тоже не сработало. Я так потерялся! :( – Holly

+0

@ Холли, я просто добавил несколько подробностей о том, что вы ошибаетесь. – Sven

+0

ОК! ТАКОЙ СОРТ РАБОТЫ !!!! Это результат Я получаю JQNNA, поэтому я использую неправильный «матч»? Но как? – Holly

Смежные вопросы