私が抱えている復号化の問題で立ち往生しています。次のように、アルファベットのみで1文字ずつオフセットされた非常に基本的な暗号があります。
A B
B C
C D
D E
to z to A
右の列は与えられた文字で、左の文字に変える必要があります。
これをファイルから読み取り、各列を次のようなリストに保存しています
#!/usr/bin/python
key = "key.txt"
encrypted = "encrypted.txt"
decrypted = "decrypted.txt"
encryptedList = []
decryptedList = []
with open(key, "r") as file:
for line in file:
currentLine = line.split()
currentDecrypted = currentLine[0]
currentEncrypted = currentLine[1]
decryptedList.append(currentEncrypted)
encryptedList.append(currentDecrypted)
file.close()
counter = 0
with open(encrypted, "r") as file:
for line in file:
currentLine = line
for letter in currentLine:
currentLetter = letter
for item in encryptedList:
if(item == currentLetter):
####here's where the problem starts####
####I've tried just printing counter, and I get mostly go
printencryptedList[counter-1]
counter = 0
break
counter += 1
復号化しようとしているのは、次のようなテキスト ファイルです。
FMMP
NZ OBNF JT KSMBB
KPIO TVDLT BQQ
GWWWWWWBMT PG DJJJJJH
カウンター -1 で FMMP の正しいカウント数 (5、12、12、15) を取得しますが、39、25、40 などを取得します。さらに詳しい情報が必要な場合はお知らせください。
これを行うためのより良い/より簡単な方法についてのアイデアも歓迎しますが、これに似た解決策も欲しいので、ここで何が起こっているのかを理解できます. ありがとう
わかりました、すべての回答と情報に感謝します。私が最終的にやったことを投稿していますが、うまくいきます。あるべきほどpythonicではないことは確かですが、人々が言及したいくつかのことを実装しました。情報をありがとう。
import string
key = "key.txt"
encrypted = ""encrypted.txt"
decrypted = "decrypted.txt
encryptedString = ""
decryptedString = ""
keyDict = {}
with open(key, "r") as file:
for line in file:
currentLine = line.split()
currentDecrypted = currentLine[0]
currentEncrypted = currentLine[1]
keyDict[currentDecrypted] = currentEncrypted
with open(encrypted, "r") as file:
for line in file:
currentLine = line
for letter in currentLine:
currentLetter = letter
encryptedString += letter
for key in keyDict:
if(keyDict[key] == letter):
decryptedString += key
break
elif(letter == " "):
decryptedString += " "
break
elif(letter == "\n"):
decryptedString += "\n"
break
with open(decrypted, "a") as file:
file.write(decryptedString)