使用自己的字母串(python)解密密文时出现问题



我设置了向用户询问一个单词来encrpyt,这使用我自己的字母表很好。

我的问题是试图让它返回破译的文本。

到目前为止,它要么两次返回加密消息,要么发回不同版本的加密消息。

我试过在for char中使用-而不是+,它给了我一个错误,我认为这是正确的方法

alphabet = "abcdefghijklmnopqrstuvwxyz"
key      = "zjrekydnqoluaxmicvpgtfbhws"

def decryptMessage(ciphertext, key):

plaintext = ""
for char in ciphertext:

if alphabet.find(char) < +1:
plaintext += key[alphabet.find(char)]
else:
plaintext += char


return plaintext

def encryptMessage(plaintext, key):

ciphertext = ""

for char in plaintext:

if alphabet.find(char) > -1:
ciphertext += key[alphabet.find(char)]
else:
ciphertext += char


return ciphertext

message = input("Type a message to encrypt: ")

encrypted = encryptMessage(message, key)

decrypted = decryptMessage(encrypted, key)

print("Plaintext message: " + message)
print("Encrypted message: " + encrypted)
print("Decrypted message: " + decrypted)

您应该使用内置的str.translate

message = "hello world"
alphabet = b"abcdefghijklmnopqrstuvwxyz"
key      = b"zjrekydnqoluaxmicvpgtfbhws"
encrypted = message.translate(dict(zip(alphabet,key)))
print("E:",encrypted)
decrypted = encrypted.translate(dict(zip(key,alphabet)))
print("D:",decrypted)

如果您想保留原始代码的主题:

您需要修改如下:

alphabet = "abcdefghijklmnopqrstuvwxyz"
key      = "zjrekydnqoluaxmicvpgtfbhws"

def decryptMessage(ciphertext, key):

plaintext = ""
for char in ciphertext:

if key.find(char) > -1:
plaintext += alphabet[key.find(char)]
else:
plaintext += char

return plaintext

def encryptMessage(plaintext, key):

ciphertext = ""
for char in plaintext:

if alphabet.find(char) > -1:
ciphertext += key[alphabet.find(char)]
else:
ciphertext += char

return ciphertext
message = input("Type a message to encrypt: ")
encrypted = encryptMessage(message, key)
decrypted = decryptMessage(encrypted, key)
print("Plaintext message: " + message)
print("Encrypted message: " + encrypted)
print("Decrypted message: " + decrypted)

最新更新