替换密码Python
我必须制作一个替换密码程序,首先创建一个随机密钥,然后使用该密钥对一些用户输入(明文)进行解密/加密。该问题的约束条件如下:替换密码Python,python,Python,我必须制作一个替换密码程序,首先创建一个随机密钥,然后使用该密钥对一些用户输入(明文)进行解密/加密。该问题的约束条件如下: encryptMsg(纯文本、密钥、字母表) 将明文字符串、字母表字符串和密钥字符串作为参数,并返回 加密的密码字符串。注意,在此函数中,必须首先将纯文本字符串转换为 小写并删除字母表字符串中未出现的任何标点/字符 解密消息(密文、密钥、字母表) 将获取密文字符串、字母表字符串和密钥字符串并返回明文 绳子 makeKey(字母表) 通过随机洗牌字母表字符串中的字符,生成并
import random
alphabet = "'abcdefghijklmnopqrstuvwxyz.,!'"
def makeKey(alphabet):
alphabet= list(alphabet)
key= random.shuffle(alphabet)
alphabet= str(alphabet)
return key
def encrypt(plaintext, key, alphabet):
"""Encrypt the string and return the ciphertext"""
return ''.join(key[l] for l in plaintext)
print (alphabet)
我知道makeKey函数有问题,因为它不工作。我需要一些关于如何启动其他功能的帮助。我们不能使用字典,只能使用列表方法。如果您能在我的任务中为我提供帮助或建议,我们将不胜感激。谢谢大家
更新:示例输出如下所示:
字母表:“abcdefghijklmnopqrstuvxyz.,!”
钥匙:“nu.t!iyvxqfl,bcjrodhkaew spzgm'
输入纯文本:嘿,这真的很有趣
密文:“v!zmhvxdmxmo!nll mikbg'
解密文本:“嘿,这真的很有趣!” 以下原始答案: 请向我们展示一些示例输入和输出。根据您的代码,我可以得出以下结果-
随机。shuffle
将所有内容都随机移动并返回无
,将makeKey更改为:
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
编辑2:
有关在加密/解密中不使用dict
s的方法,请参阅以下内容:
import random
alphabet = 'abcdefghijklmnopqrstuvwxyz.,! ' # Note the space at the end, which I kept missing.
# You could generate the key below using makeKey (i.e. key=makeKey(alphabet))
key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm'
plaintext = "Hey, this is really fun!"
# v! zmhvxdmxdmo!nll mikbg
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
def encrypt(plaintext, key, alphabet):
keyIndices = [alphabet.index(k.lower()) for k in plaintext]
return ''.join(key[keyIndex] for keyIndex in keyIndices)
def decrypt(cipher, key, alphabet):
keyIndices = [key.index(k) for k in cipher]
return ''.join(alphabet[keyIndex] for keyIndex in keyIndices)
cipher = encrypt(plaintext, key, alphabet)
print(plaintext)
print(cipher)
print(decrypt(cipher, key, alphabet))
印刷品:
编辑:
经过一些间距问题和实验,我提出了一个相当简单的解决方案:
import random
alphabet = 'abcdefghijklmnopqrstuvwxyz.,! '
key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm'
plaintext = "Hey, this is really fun!"
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
def encrypt(plaintext, key, alphabet):
keyMap = dict(zip(alphabet, key))
return ''.join(keyMap.get(c.lower(), c) for c in plaintext)
def decrypt(cipher, key, alphabet):
keyMap = dict(zip(key, alphabet))
return ''.join(keyMap.get(c.lower(), c) for c in cipher)
cipher = encrypt(plaintext, key, alphabet)
print(plaintext)
print(cipher)
print(decrypt(cipher, key, alphabet))
这张照片是:
以下原始答案: 请向我们展示一些示例输入和输出。根据您的代码,我可以得出以下结果-
随机。shuffle
将所有内容都随机移动并返回无
,将makeKey更改为:
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
编辑2:
有关在加密/解密中不使用dict
s的方法,请参阅以下内容:
import random
alphabet = 'abcdefghijklmnopqrstuvwxyz.,! ' # Note the space at the end, which I kept missing.
# You could generate the key below using makeKey (i.e. key=makeKey(alphabet))
key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm'
plaintext = "Hey, this is really fun!"
# v! zmhvxdmxdmo!nll mikbg
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
def encrypt(plaintext, key, alphabet):
keyIndices = [alphabet.index(k.lower()) for k in plaintext]
return ''.join(key[keyIndex] for keyIndex in keyIndices)
def decrypt(cipher, key, alphabet):
keyIndices = [key.index(k) for k in cipher]
return ''.join(alphabet[keyIndex] for keyIndex in keyIndices)
cipher = encrypt(plaintext, key, alphabet)
print(plaintext)
print(cipher)
print(decrypt(cipher, key, alphabet))
印刷品:
编辑:
经过一些间距问题和实验,我提出了一个相当简单的解决方案:
import random
alphabet = 'abcdefghijklmnopqrstuvwxyz.,! '
key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm'
plaintext = "Hey, this is really fun!"
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
def encrypt(plaintext, key, alphabet):
keyMap = dict(zip(alphabet, key))
return ''.join(keyMap.get(c.lower(), c) for c in plaintext)
def decrypt(cipher, key, alphabet):
keyMap = dict(zip(key, alphabet))
return ''.join(keyMap.get(c.lower(), c) for c in cipher)
cipher = encrypt(plaintext, key, alphabet)
print(plaintext)
print(cipher)
print(decrypt(cipher, key, alphabet))
这张照片是:
你怎么知道它不起作用,你叫它了吗?另外,如果您想将其作为字符串取回,请使用
''.join(alphabet)
而不是str(alphabet)
您打算如何解密?尚未获得。这就是我的问题所在。我需要一些指导,我该怎么做#NoviceProbs@Joe第二种方法对你有效吗?你怎么知道它不起作用,你叫它了吗?另外,如果您想将其作为字符串取回,请使用''.join(alphabet)
而不是str(alphabet)
您打算如何解密?尚未获得。这就是我的问题所在。我需要一些指导,我该怎么做#NoviceProbs@Joe第二种方法对您有效吗?只是在上面添加了一个示例输出。我也很感谢你对其他函数的帮助。非常感谢。除了使用dict(zip(…)还有其他选择吗。我们不允许使用字典。这也是我在网上找到的方法。这肯定是有效的,但遗憾的是,我们的教授关心的是一点暴力。有关不使用dict
s@Reti43,有道理,我刚离开办公桌,一回到电脑就可以了;在此期间,请随意编辑:)@Reti43编辑了我的答案,包括您的反馈,谢谢!刚刚在上面添加了一个示例输出。我也很感谢你对其他函数的帮助。非常感谢。除了使用dict(zip(…)还有其他选择吗。我们不允许使用字典。这也是我在网上找到的方法。这肯定是有效的,但遗憾的是,我们的教授关心的是一点暴力。有关不使用dict
s@Reti43,有道理,我刚离开办公桌,一回到电脑就可以了;在此期间,请随意编辑:)@Reti43编辑了我的答案,包括您的反馈,谢谢!