2017-06-13 1 views
1

Heute habe ich eine .py-Datei gemacht, die mit einem vigenere-Quadrat verschlüsselte Strings entschlüsselt. Ich bin so weit gekommen, aber ich kann nicht scheinen, Räume zur cipher Liste und encr_txt hinzuzufügen, weil es die entschlüsselte Nachricht entstellt. Anstelle von "Nachricht ist, Hallo, mein Name ist schlank schattig", erhalten Sie "Nachricht ist, hellprvmwhwebwrw k d tady", wo, als ob ich Leerzeichen aus encr_txt und der Ciphl-Liste lasse, bekomme ich eine gute Nachricht. Ich weiß nicht, wie ich das beheben kann, es gibt auch keine Fehler, ich habe erst vor ein paar Tagen angefangen, in Python zu programmieren, wenn es offensichtlich ist, tut mir leid. Auch weiß ich, auf diese Weise leichter gemacht werden könnte, aber im Listen so wählte das Lernen ich es auf diese Weise statt, so etwas zu machen: mein Entschlüsselungsprogramm macht die falsche Sache

<a href="https://stackoverflow.com/questions/35711747/ascii-vigenere-cipher-not-decrypting-properly">Another question i found relating my problem but does not describe my situation</a>

Code:

# -*- coding: utf-8 -*- 
#^encoding 

# Encrypted text 
# encr_txt = 'tkedobaxoudqrrffhhhalbmmcnedeo' 
encr_txt = 'qexpg vy zeen ie wdrm elsmy' 
#encr_list = list(encr_txt) 
txtpos = 0 
# Key to^
key = 'james' 
keypos = 0 

limit = len(encr_txt) 
limitpos = 0 
# Vigenere square 
ciphr = ['abcdefghijklmnopqrstuvwxyz ', 
     'bcdefghijklmnopqrstuvwxyz a', 
     'cdefghijklmnopqrstuvwxyz ab', 
     'defghijklmnopqrstuvwxyz abc', 
     'efghijklmnopqrstuvwxyz abcd', 
     'fghijklmnopqrstuvwxyz abcde', 
     'ghijklmnopqrstuvwxyz abcdef', 
     'hijklmnopqrstuvwxyz abcdefg', 
     'ijklmnopqrstuvwxyz abcdefgh', 
     'jklmnopqrstuvwxyz abcdefghi', 
     'klmnopqrstuvwxyz abcdefghij', 
     'lmnopqrstuvwxyz abcdefghijk', 
     'mnopqrstuvwxyz abcdefghijkl', 
     'nopqrstuvwxyz abcdefghijklm', 
     'opqrstuvwxyz abcdefghijklmn', 
     'pqrstuvwxyz abcdefghijklmno', 
     'qrstuvwxyz abcdefghijklmnop', 
     'rstuvwxyz abcdefghijklmnopq', 
     'stuvwxyz abcdefghijklmnopqr', 
     'tuvwxyz abcdefghijklmnopqrs', 
     'uvwxyz abcdefghijklmnopqrst', 
     'vwxyz abcdefghijklmnopqrstu', 
     'wxyz abcdefghijklmnopqrtsuv', 
     'xyz abcdefghijklmnopqrtsuvw', 
     'yz abcdefghijklmnopqrtsuvwx', 
     'z abcdefghijklmnopqrtsuvwxy', 
     'abcdefghijklmnopqrtsuvwxyz '] 

first = ciphr[0] 
string = '' 


def start(): 
    global limitpos 
    limitpos += 1 
    global keypos 
    for i in ciphr: 
     if keypos == len(key): 
      keypos = 0 
     else: 
      pass 
     if i[0] == key[keypos]: 
      #print "%s, %s" % (i[0], i) 
      global currenti 
      currenti = i 
      #print currenti 
      finder() 
      break 
     else: 
      pass 

def finder(): 
    global keypos 
    global txtpos 
    done = False 
    position = 0 
    while done == False: 
     for i in currenti[position]: 
      if i == '_': 
       pass 

      if i == encr_txt[txtpos]: 
       global string 
       string = string + first[position] 
       #print "message is, %s" % string 
       keypos += 1 
       txtpos += 1 

       done = True 
       if limitpos == limit: 
        print "message is, %s" % string 
        break 
       else: 
        start() 
      else: 
       position += 1 
       pass 

start() 

Antwort

2

Hinzufügen von Räumen der Tabelle ändert die Art, wie die Chiffre funktioniert. Sie können nicht erwarten, dass diese Art von Änderung vorgenommen wird und keinen Einfluss auf die Art und Weise, wie Nachrichten verschlüsselt und entschlüsselt werden, hat!

Nebenbei ist die letzte Zeile Ihrer Tabelle falsch. Es ist identisch mit der ersten Zeile, aber es sollte den Platz in der ersten Position haben.

+0

eine Idee, wie Sie Leerzeichen hinzufügen, ohne die Nachricht zu verstopfen? – PizzaCat

+0

@PizzaCat Sie können nicht. Die Nachricht, die Sie zu entschlüsseln versuchen, wurde mit einer Chiffre verschlüsselt, die die Leerzeichen in der Eingabe übersprang. Sie müssen die Räume alleine lassen, um sie korrekt zu entschlüsseln! – duskwuff

+0

Ich fragte mich, ob ich es so schreiben könnte https://pastebin.com/LCfhwRys – PizzaCat

Verwandte Themen