好吧,这里有几件事。。。
首先,我会告诉你你想要什么,并解释我使用了什么,以及需要对原始代码进行的一些更改。然后,我将解释一些内在的问题,你想做什么,并建议一些领域阅读/一些方法,你可能想改善你已经拥有的。
下面是您要查找的代码(同时保留与上面提交的代码相同的流):import random
result = ''
choice = ''
message = ''
characters_in_order = [chr(x) for x in range(32,127)]
while choice != 0:
choice = input("\n Do you want to encrypt or decrypt the message?\n 1 to encrypt, 2 to decrypt or 0 to exit program. ")
if str(choice) == '1':
message = input('\nEnter message for encryption: ')
r_seed = input('Enter an integer to use as a seed: ')
random.seed(r_seed)
shuffled_list = [chr(x) for x in range(32,127)]
random.shuffle(shuffled_list)
for i in range(0, len(message)):
result += shuffled_list[characters_in_order.index(message[i])]
print(result + '\n\n')
result = ''
elif str(choice) == '2':
message = input('\nEnter message to decrypt: ')
r_seed = input('Enter an integer to use as a seed (should be the same one used to encrypt): ')
random.seed(r_seed)
shuffled_list = [chr(x) for x in range(32,127)]
random.shuffle(shuffled_list)
for i in range(0, len(message)):
result += characters_in_order[shuffled_list.index(message[i])]
print(result + '\n\n')
result = ''
elif str(choice) != '0':
print('You have entered an invalid input, please try again. \n\n')
您会注意到,我设置了一个全局“按顺序字符”列表,它只是按顺序排列的每个ASCII字符(32-126)。我还导入了“random”模块,并使用它根据用户输入的种子对字符进行无序排列。只要这个种子在加密和解密端是相同的,它就会产生相同的无序列表,并且应该加密或解密相同的字符串。还要注意输入选项周围的str()。否则,用户必须输入“1”,而不是1才能提交选择而不出错。
所有这些都说明。。。请注意,新函数的工作方式是查看一个列表中某个字符的索引,然后在另一个列表中拉出该索引处的字符。您使用的递增或递减字符的ASCII码的方法是基本的(尽管没有比这更基本),但它也有一个相当严重的缺陷,即ASCII集的一端或另一端的字符不会返回ASCII字符。如果您在位级别加密它(这是首选),这无关紧要/无关紧要,但在这里,您不会得到想要的字符串类型,如果您要,例如,在要加密的明文中输入[空格](ASCII 32)。
如果你感兴趣的话,你可能想阅读一下对称密钥加密/DES,了解一些关于加密是如何真正完成的想法,尽管这是一个开始/兴趣的道具,而且这肯定是一个有趣的方式来创建某种密码拼图或类似的东西。我不会假装是什么专家,但我至少可以指点你的写作方向。(https://en.wikipedia.org/wiki/Data_Encryption_Standardhttps://en.wikipedia.org/wiki/Symmetric-key_algorithm)
考虑让您的代码读入一个.txt文件并打印到一个.txt文件中,而不是对消息使用用户输入。
再说一次,我无论如何都不是专家,而且肯定有一些有趣的用途,比如你想要的程序,如果你感兴趣的话,试着给你指出正确的方向。希望所有这些都有帮助!