Python解密与列表

tru*_*ype 0 python encryption list

我遇到了解密问题.我有一个非常基本的密码,只有字母表,并且偏移了1个字母,如下所示:

A    B
B    C
C    D
D    E
to z  to A
Run Code Online (Sandbox Code Playgroud)

右栏是我给的字母,我需要将它们转到左边的字母.

我正在从一个文件中读取它,并将每列保存到这样的列表中

#!/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
Run Code Online (Sandbox Code Playgroud)

我正在尝试解密的是一个看起来像这样的文本文件

FMMP
NZ OBNF JT KSMBB
KPIO TVDLT BQQ
GWWWWWWBMT PG DJJJJJH
Run Code Online (Sandbox Code Playgroud)

我得到FMMP的正确计数,(5,12,12,15),计数器-1,但后来得到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)
Run Code Online (Sandbox Code Playgroud)

Abh*_*jit 5

str.translate最适合凯撒密码类加密,这似乎是你想要做的

首先需要通过string.maketrans创建转换表

可以从string.ascii_uppercase获取大写字母字符

要旋转Alpha字符,您只需执行此操作即可 ascii_uppercase[1:] + ascii_uppercase[0]

现在这是一个从这里走的路

>>> secret = """FMMP
NZ OBNF JT KPTIVB
KPIO TVDLT BTT
GVOEBNFOUBMT PG DPNQVUJOH"""
>>> from string import ascii_uppercase as UPPER, maketrans
>>> print secret.translate(maketrans(UPPER[1:] + UPPER[0], UPPER))
Run Code Online (Sandbox Code Playgroud)