2017-06-13 14 views
1

今日私は、vigenereの広場で暗号化された文字列を解読する.pyファイルを作った。私はこれまでに得ているが、暗号化されたメッセージを壊すので、ciphrリストとencr_txtにスペースを追加するように思われる。 "メッセージは、こんにちは私の名前は薄い日陰です"の代わりに、 "hellprvmwhwebwrw k d thady"というメッセージが表示されます。ここでは、encr_txtとciphrのリストから空白を除いて、きれいなメッセージが表示されます。私はこの問題を解決する方法も知られていませんが、私はちょうど2日前にPythonでコーディングを始めました。 私の解読プログラムが間違ったことをしています

<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>

コード::にスペースを追加する

# -*- 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() 

答えて

2

また、私はので、私はこの方法の代わりに、このような何か、それを作ることを選んだ、これは方法簡単に行うことができる知っているが、イム学習リストテーブルが暗号の働きを変えます。そのような変更を行うことは期待できず、メッセージの暗号化と復号化に影響を与えません!

脇に、テーブルの最後の行が間違っています。最初の行と同じですが、最初の位置にスペースが必要です。

+0

メッセージを壊さずにスペースを追加する方法はありますか? – PizzaCat

+0

@PizzaCatできません。解読しようとしているメッセージは、入力のスペース文字をスキップした暗号を使用して暗号化されています。あなたはそれを正しく解読するためにスペースだけを残しておいてください! – duskwuff

+0

私はこのように書いているのだろうかと疑問に思っていました。https://pastebin.com/LCfhwRys – PizzaCat

関連する問題