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)
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)
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |