修改程序以使用python上的过去加密字母表解密消息

时间:2011-12-16 21:16:43

标签: python encryption

我需要帮助将第二部分写入这个程序,这几乎已经完成了。我写完了加密字母表的部分,但现在我发现自己陷入了尝试使用新加密作为一种解码器环的问题,以解密某人可能输入该程序的随机加扰消息。

所以为了让这更容易理解,让我们说这个程序的加密部分为您提供: NHPWJXEYOZMAFUSCIGLVTDBKRQ

现在有人会输入一些使用新的加扰字母加密的随机消息。所以,请说出某人的类型: VYOL OL FR 1LV LJPGJV FJLLNEJ!

现在我需要编写的程序必须使用乱码字母来解码消息并打印:这是我的第1个秘密消息!

如果有人可以提供帮助,我将非常感激。如果它仍然听起来令人困惑,请问。我的程序如下:

           # ENCODE a secret message
            # Scramble the alphabet, read a secret message, encode it, print scrambled

            import random

            def main():

                encryption()

                decryption()

            def encryption():

                encrypt=["*"]*26   # all letters available
                print(encrypt)

                print("Alphabet:  ", end="")
                for numbah in range(26):
                    #converts numbah into a letter
                    letter = chr(numbah+65) # converts 0-25 --> 'A' = 'Z'

                    print(letter, end="")

                    #Reminder: find an empty position for that letter to be placed

                    notfound = True
                    while notfound:
                        possible_position = random.randint(0,25)
                        if encrypt[possible_position] == "*":
                            notfound = False
                    encrypt[possible_position] = letter

                print("\nScrambled: " , end="")
                for numbah in range(26):
                    print(encrypt[numbah], end="")

                print("\n\n")

                msg=input("Now, please type your secret message to encode: ")
                print("Your secret message:  " + msg)
                print("Your message encoded: ", end="")

                # reminder non alphabetic characters should 'float thru' unchanged!

                for alpha in msg.upper():
                    if alpha < "A" or alpha > "Z":
                        print(alpha, end="")
                    else:
                        print( encrypt[ ord(alpha) - 65], end="")

                print("\n")

            def decryption():

                scram_alph = input("Input the scrambled alphabet from the early prog:  ")

                scram_mess = input("Input the scrambled messgae you want decoded:  ")







            main()

2 个答案:

答案 0 :(得分:2)

Python标准库中有一些功能可以使这项任务变得非常简单。请查看str.translate()string.maketrans()

>>> import string
>>> t = string.maketrans("NHPWJXEYOZMAFUSCIGLVTDBKRQ",
                         string.ascii_uppercase)
>>> "DRSA SA XG 1AD AZCEZD XZAAUJZ!".translate(t)
'THIS IS MY 1ST SECRET MESSAGE!'

答案 1 :(得分:1)

你太过于复杂了。使用Python为您提供的内置迭代工具。

>>> alphabet = "NHPWJXEYOZMAFUSCIGLVTDBKRQ".lower()
>>> message = "VYOL OL FR 1LV LJPGJV FJLLNEJ!".lower()
>>>
>>> table = dict(zip(alphabet, string.ascii_lowercase))
>>> "".join(table.get(char, char) for char in message)
'this is my 1st secret message!'

说明

该行

table = dict(zip(alphabet, string.ascii_lowercase))

制作明文字母的密文字典。为什么?两个字符串中的zip为您提供了一对列表:(第一个字母,第一个字母),(第二个字母,第二个字母)等。然后dict生成一个字典。这一行

"".join(table.get(char, char) for char in message)

说要在字典中查找消息中的每个字符(如果它不存在,例如它是空格或者!则不要更改它)并将它们粘合回字符串。


顺便说一句,要制作一个加扰字母,你需要做的就是

>>> alphabet = list(string.ascii_lowercase)
>>> random.shuffle(alphabet)
>>> alphabet = "".join(alphabet)
>>> alphabet
'emxcqgzvkruisjtlydbhafopnw'